使用Date :: Format时出错

时间:2011-05-27 11:07:26

标签: perl

我想将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 个答案:

答案 0 :(得分:3)

错误消息点亮: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),,而月份是自1月(0..11)以来的月数。这个   与返回的值一致   来自localtime()和gmtime()。

修改 对于字符串中日期的通用解决方案,请查看此问题的答案:How can I parse dates and convert time zones in Perl?

答案 1 :(得分:2)

DateTime::Format::Strptime
    ->new(pattern => '%FT%T')
    ->parse_datetime('2003-07-04T15:56:00')
    ->strftime('%d/%m-%Y')

# returns 04/07-2003