Получение ошибки при использовании Date :: Format - PullRequest
1 голос
/ 27 мая 2011

Я хотел бы преобразовать 2003-07-04T15:56:00 в 04/07-2003, поэтому я делаю

#!/usr/bin/perl -w
use strict;
use Date::Format;
use Data::Dumper;

my $time_format = "%d/%m-%Y";
my $time = "2003-07-04T15:56:00";

print Dumper time2str($time_format, $time);

и получаю

Argument "2003-07-04T15:56:00" isn't numeric in localtime at /usr/lib/perl5/vendor_perl/5.8.8/Date/Format.pm line 123.
$VAR1 = '01/01-1970';

Есть идеи, как сделать это преобразование даты?

Ответы [ 2 ]

3 голосов
/ 27 мая 2011

Сообщение об ошибке появляется: time2str ожидает числовое представление даты, но получил строку "2003-07-04T15:56:00".

Скорее всего, есть несколько способов решить эту проблему.Один из них - Time :: Local , который может помочь вам создать правильную числовую дату.

Попробуйте заменить

my $time = "2003-07-04T15:56:00";

на:

my $time = timelocal(0,56,15,4,7-1,2003);

Как указал @Jorik, спецификация месяца немного необычна:

Стоит обратить особое внимание на ожидаемые диапазоны для указанных значений.Значением дня месяца является фактический день (т. Е. 1..31), , а месяц - количество месяцев с января (0..11) .Это согласуется со значениями, возвращаемыми из localtime () и gmtime ().

Edit Для общих решений для дат в строках проверьте ответы на этот вопрос: Как я могу разобрать даты и конвертировать часовые пояса в Perl? .

2 голосов
/ 27 мая 2011
DateTime::Format::Strptime
    ->new(pattern => '%FT%T')
    ->parse_datetime('2003-07-04T15:56:00')
    ->strftime('%d/%m-%Y')

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