Как я могу преобразовать временной метки ISO8601 в Unix Time в Perl?
-
29-09-2019 - |
Вопрос
Учитывая строку, которая представляет дату/время в формате ISO8601 (например, 20100723T073000
), Мне нужно в конечном итоге разобраться в этом в формат, поставляемого пользователем, используя общий strftime
формат строки. Чтобы сделать это, мне нужно преобразовать временную метку ISO8601 в временную метку UNIX. Для Perl существует огромное количество модулей манипуляции с датой/времени, и я немного перегружен. Есть предложения о том, как это сделать?
Решение
Модуль чемпиона для обработки дат, времени, длительности, часовых поясов и форматов - это DateTime. Анкет После того, как вы получите свой объект DateTime, вы можете выполнить огромное количество операций, например, добавление/вычитание других объектов DateTime или DateTime :: Продолжительность Объекты или распечатка в другом формате.
use strict; use warnings;
use DateTime;
use DateTime::Format::ISO8601;
my $dt = DateTime::Format::ISO8601->parse_datetime('20100723T073000');
print $dt->strftime('%F %T');
Отпечатки: "2010-07-23 07:30:00"
Другие советы
Если у вас нет или не хотите устанавливать DateTime::Format::ISO8601
модуль, вы можете проанализировать хотя бы подмножество ISO8601 с HTTP::Date
:
$ perl -MHTTP::Date -wle 'print str2time("2013-11-30T23:05:03")'
1385845503
Как и в случае с любой обработкой свиданий, будьте осторожны с проблемами часовых поясов.