Как я могу изменить часовой пояс значения даты и времени в Perl?

Используя эту функцию:

perl -e 'use Time::Local; print timelocal("00","00","00","01","01","2000"),"\n";'

Это возвратит epochtime - но только в GMT - если я захочу результат в GMT+1 (который является системами localtime (TZ)), что я должен изменить?

Заранее спасибо,

Anders

7
задан Anders 2 February 2010 в 07:28
поделиться

4 ответа

Существует только одно стандартное определение для эпохи, на основе UTC, и не разные эпохтимы для разных часовых поясов.

Если вы хотите найти компенсацию смещения между GMTime и Listime , используйте

use Time::Local;
@t = localtime(time);
$gmt_offset_in_seconds = timegm(@t) - timelocal(@t);
4
ответ дан 6 December 2019 в 10:50
поделиться

В то время как 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:

DateTime

3
ответ дан 6 December 2019 в 10:50
поделиться

Вам просто нужно установить часовой пояс. Попробуйте:

env TZ=UTC+1 perl -e 'use Time::Local; print timelocal("00","00","00","01","01","2000"),"\n";'
2
ответ дан 6 December 2019 в 10:50
поделиться

Время::Местное::таймлокальное обратное местному времени. Результат будет в локальном времени вашего хоста:

$ 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
2
ответ дан 6 December 2019 в 10:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: