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天)。然而,我很惊讶它没有抛出一个错误。