Как я могу преобразовать метку времени ISO8601 в Unix время в Perl? - PullRequest
7 голосов
/ 25 июня 2010

Учитывая строку, которая представляет дату / время в формате ISO8601 (например, 20100723T073000), мне нужно в конечном итоге разобрать это в предоставленный пользователем формат, используя общую строку формата strftime.Для этого мне нужно преобразовать метку времени ISO8601 в метку времени Unix.Для Perl существует огромное количество модулей манипуляции с датой и временем, и я немного перегружен.Любые предложения о том, как это сделать?

Ответы [ 2 ]

13 голосов
/ 25 июня 2010

Модуль чемпионов для обработки дат, времени, длительности, часовых поясов и форматов: DateTime . Получив объект DateTime, вы можете выполнять с ним огромное количество операций, например добавлять / вычитать другие объекты DateTime или DateTime :: Duration объекты или распечатывать его в другом формате. *

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"

4 голосов
/ 01 декабря 2013

Если у вас нет или вы не хотите устанавливать модуль DateTime::Format::ISO8601, вы можете проанализировать хотя бы часть ISO8601 с помощью HTTP::Date:

$ perl -MHTTP::Date -wle 'print str2time("2013-11-30T23:05:03")'
1385845503

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

...