Используя эту функцию:
perl -e 'use Time::Local; print timelocal("00","00","00","01","01","2000"),"\n";'
Это возвратит epochtime - но только в GMT - если я захочу результат в GMT+1 (который является системами localtime (TZ)), что я должен изменить?
Заранее спасибо,
Anders
Существует только одно стандартное определение для эпохи, на основе UTC, и не разные эпохтимы для разных часовых поясов.
Если вы хотите найти компенсацию смещения между GMTime и Listime , используйте
use Time::Local;
@t = localtime(time);
$gmt_offset_in_seconds = timegm(@t) - timelocal(@t);
В то время как Time::Local - разумное решение, возможно, лучше использовать более современный объектно-ориентированный модуль DateTime. Вот пример:
use strict;
use DateTime;
my $dt = DateTime->now;
print $dt->epoch, "\n";
Для часовых поясов можно использовать модуль DateTime::TimeZone.
use strict;
use DateTime;
use DateTime::TimeZone;
my $dt = DateTime->now;
my $tz = DateTime::TimeZone->new(name => "local");
$dt->add(seconds => $tz->offset_for_datetime($dt));
print $dt->epoch, "\n";
CPAN Links:
Вам просто нужно установить часовой пояс. Попробуйте:
env TZ=UTC+1 perl -e 'use Time::Local; print timelocal("00","00","00","01","01","2000"),"\n";'
Время::Местное::таймлокальное
обратное местному времени
. Результат будет в локальном времени вашего хоста:
$ perl -MTime::Local -le \ 'print scalar localtime timelocal "00","00","00","01","01","2000"' Tue Feb 1 00:00:00 2000
Вы хотите, чтобы gmtime
соответствовало этому местному времени
?
$ perl -MTime::Local' -le \ 'print scalar gmtime timelocal "00","00","00","01","01","2000"' Mon Jan 31 23:00:00 2000
Хотите, чтобы это было наоборот, локальное время
, соответствующее этому gmtime
?
$ perl -MTime::Local -le \ 'print scalar localtime timegm "00","00","00","01","01","2000"' Tue Feb 1 01:00:00 2000