Perl POSIX返回错误年份
我有密码:Perl POSIX返回错误年份,perl,posix,Perl,Posix,我有密码: use POSIX qw( strftime ); print POSIX::strftime("%a, %d %b %G %T-0000",localtime(1325427034)); 哪个应该输出 Sun, 01 Jan 2012 09:10:34-0000 但相反,它输出 Sun, 01 Jan 2011 09:10:34-0000 在我做的一些测试中,它似乎发生在2010年、2011年或2012年的前几天。它在所有其他情况下都能正常工作,包括2013年和2014年的前
use POSIX qw( strftime );
print POSIX::strftime("%a, %d %b %G %T-0000",localtime(1325427034));
哪个应该输出
Sun, 01 Jan 2012 09:10:34-0000
但相反,它输出
Sun, 01 Jan 2011 09:10:34-0000
在我做的一些测试中,它似乎发生在2010年、2011年或2012年的前几天。它在所有其他情况下都能正常工作,包括2013年和2014年的前几天。有什么我应该做的不同吗?
%G
受标准约束
从
有关这些参数和其他参数的详细信息,请参阅系统的strftime()手册页
%G以世纪为十进制数字的ISO 8601周为基础的年份(见注释)。对应于ISO周数的4位年份(参见%V)。这有
与%Y的格式和值相同,但如果ISO周数属于上一年或下一年,则使用该年。(TZ)
您想要的是%Y,而不是%G。%G与%V一起使用,以显示ISO 8601周的编号,这些编号可能在年初之前开始,也可能在年末之后结束 例如:
use POSIX 'strftime';
print strftime("%Y-%m-%d week %G-%V\n",0,0,0,$_,11,111) for 25..31;
print strftime("%Y-%m-%d week %G-%V\n",0,0,0,$_,0,112) for 1..9;
输出:
2011-12-25 week 2011-51
2011-12-26 week 2011-52
2011-12-27 week 2011-52
2011-12-28 week 2011-52
2011-12-29 week 2011-52
2011-12-30 week 2011-52
2011-12-31 week 2011-52
2012-01-01 week 2011-52
2012-01-02 week 2012-01
2012-01-03 week 2012-01
2012-01-04 week 2012-01
2012-01-05 week 2012-01
2012-01-06 week 2012-01
2012-01-07 week 2012-01
2012-01-08 week 2012-01
2012-01-09 week 2012-02
愚蠢的ISO 8601。谢谢将其更改为%Y修复了它!
2011-12-25 week 2011-51
2011-12-26 week 2011-52
2011-12-27 week 2011-52
2011-12-28 week 2011-52
2011-12-29 week 2011-52
2011-12-30 week 2011-52
2011-12-31 week 2011-52
2012-01-01 week 2011-52
2012-01-02 week 2012-01
2012-01-03 week 2012-01
2012-01-04 week 2012-01
2012-01-05 week 2012-01
2012-01-06 week 2012-01
2012-01-07 week 2012-01
2012-01-08 week 2012-01
2012-01-09 week 2012-02