Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl 时间::工件返回错误的值_Perl - Fatal编程技术网

Perl 时间::工件返回错误的值

Perl 时间::工件返回错误的值,perl,Perl,我正在尝试使用模块将日期从yymmdd转换为YYYY-MM-DD。输入为2000年11月31日(20001131),输出为2000-12-01。事实上,11月31日甚至不存在 use Time::Piece; my $dt_str = Time::Piece->strptime('20001131', '%Y%m%d')->strftime('%Y-%m-%d'); print $dt_str; 我在这里遗漏了什么吗?在内部,它只执行粗略的验证和错误报告,然后执行与POSIX::m

我正在尝试使用模块将日期从
yymmdd
转换为
YYYY-MM-DD
。输入为2000年11月31日(20001131),输出为
2000-12-01
。事实上,11月31日甚至不存在

use Time::Piece;
my $dt_str = Time::Piece->strptime('20001131', '%Y%m%d')->strftime('%Y-%m-%d');
print $dt_str;

我在这里遗漏了什么吗?

在内部,它只执行粗略的验证和错误报告,然后执行与POSIX::mktime相同的转换;一个月结束后的任何一天都只会导致它将生产日期提前到下个月。这似乎有点不一致;由于它允许这样做几天,我也希望它将“20005931”视为“2004-12-01”,但它会出错。

Time::Piece->strtime
会创建一个GMT日期。根据您所在的时区,您可以在日期中设置偏移量。正如@devnull所说,你需要处理这个问题。澄清一下,你不是在创建一个日期,你是在创建一个时间戳,时间大概是午夜。然后提取本地时区中的日期部分。为什么是11月30日?由于11月31日不存在,12月1日是IMHO的最佳近似值(11月30日+1天)。然而,我很惊讶它没有抛出一个错误。