Почему Perl DateTime-> from_epoch возвращает 1969-12-31 23:59:59? - PullRequest
1 голос
/ 15 октября 2010

Мы обрабатываем данные из API, который возвращает значения даты / времени в следующей форме:

1061943540000

Когда я использовал инструмент на этой странице , он конвертирует значение в следующую правильную дату:

Tue Aug 26 2003 17:19:00 GMT-0700 (PDT)

Мы используем следующий код Perl для преобразования даты / времени в нашем скрипте:

use DateTime;
my $dt = DateTime->from_epoch(epoch => $time);

Однако это приводит к следующему выводу, который является неправильным:

1969-12-31 23:59:59

Я совершенно сбит с толку, почему это не работает, и был бы признателен, если бы кто-нибудь объяснил, что я делаю неправильно, и какой код я должен использовать для правильного преобразования. Заранее спасибо!

1 Ответ

11 голосов
/ 15 октября 2010

Это не время эпохи в секундах.Похоже, к нему привязаны миллисекунды.Это портит материал, который использует DateTime , то есть секунды с начала эпохи.Perl, как правило, имеет целые секунды с эпохи (см. время , местное время , gmtime ).

.Вы получаете время, которое далеко, далеко.Я могу получить другую дату, чем вы, потому что мой Perl 64-битный и имеет исправление Y2038:

$ perl -MDateTime -E 'say DateTime->from_epoch( epoch => shift() )' 1061943540000
35621-08-26T04:40:00

Деление на 1000 дает вам правильную дату, хотя в UTC:

$ perl -MDateTime -E 'say DateTime->from_epoch( epoch => shift() / 1000 )' 1061943540000   
2003-08-27T00:19:00

Если вы вернетесь к своему онлайн-инструменту Java, вы заметите, что он дает вам ту же дату с 1061943540000 и 1061943540. Предполагается, что это миллисекунды.Это также означает, что это дает неправильную дату, если 1061943540 был в миллисекундах.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...