我想将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';
知道怎么做这个日期转换吗?
答案 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