perl - 当我从临近年底的日期中减去天数时,为什么 DateTime strptime 会给出错误的年份?

标签 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);

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

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

为什么会这样?

最佳答案

使用%Y,而不是%G,除非您明确表示要根据ISO 8601 week number calendar 显示日期.

(在 ISO 日历中,每年都是从星期一到星期日运行的整数周。因此,只要 1 月 1 日不是星期一,它的一侧就会有最多三天属于“错误”例如,ISO 2021 年从 1 月 4 日星期一开始;1 月 1 日至 3 日是 2020 年的最后一周。反过来,ISO 2026 年将从 2025 年 12 月 29 日星期一开始,因此那个 12 月的最后 3 天已经是下一个 ISO 年的第一周。)

关于perl - 当我从临近年底的日期中减去天数时,为什么 DateTime strptime 会给出错误的年份?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38102558/

相关文章:

python - 如何向 python pandas 中的索引列添加常量时间增量?

vb.net - 将unix时间转换为DateTime

java - 如何使用 GWT 将日期时间字符串转换为日期?

javascript - pentaho mysql 日期时间 javascript 比较

perl - 好的 IDE 或 Mason 语法高亮编辑器?

perl - 在 Perl 调试器和 CPAN 客户端中向上和向下箭头不再起作用

PHP datetime 添加一秒

c - 来自 C 守护进程的 perl 系统调用脚本导致 perl 脚本崩溃

perl - 等待子进程在 perl 的系统命令中完成

perl - 散列键周围的引号是 Perl 中的一个好习惯吗?