为什么DateTime的strftime给出了错误的一年,当我从一年结束的日期中减去天数?

cte*_*rra 2 perl datetime

我必须打开一些在文件名中有日期的日志.所以我试图在某个日期打开所有文件.

我正在使用DateTime.我做:

do 
{
    $datechoice = $today->strftime('%G%m%d'); #YearMonthDay
    $date_for_graph = $today->strftime('%d/%m/%G');
    # unshift @Log_Period_Time, "$date_for_graph";
    print $datechoice." - ".$date_for_graph."<br>";
    $today->subtract(days => 1);
} while($datechoice > 20141107);
Run Code Online (Sandbox Code Playgroud)

但是输出显示了接近年底的日期错误的年份:

20160109 - 09/01/2016
20160108 - 08/01/2016
20160107 - 07/01/2016
20160106 - 06/01/2016
20160105 - 05/01/2016
20160104 - 04/01/2016
20150103 - 03/01/2015  <-- Should be 2016
20150102 - 02/01/2015
20150101 - 01/01/2015
20151231 - 31/12/2015
20151230 - 30/12/2015
20151229 - 29/12/2015
...
20150103 - 03/01/2015
20150102 - 02/01/2015
20150101 - 01/01/2015
20151231 - 31/12/2015
20151230 - 30/12/2015
20151229 - 29/12/2015
20141228 - 28/12/2014  <-- Should be 2015
20141227 - 27/12/2014
20141226 - 26/12/2014
Run Code Online (Sandbox Code Playgroud)

为什么会这样?

Mar*_*eed 7

strftime代码%G是根据ISO 8601周数日历的年份.12月底的天数可能在下一个ISO年份,1月初的天数可能在前一天.请%Y改用.