Как я могу преобразовать временной метки ISO8601 в Unix Time в Perl?

StackOverflow https://stackoverflow.com/questions/3113487

Вопрос

Учитывая строку, которая представляет дату/время в формате 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

Как и в случае с любой обработкой свиданий, будьте осторожны с проблемами часовых поясов.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top