三月最后一个星期日的 touch -t 错误

Sch*_*der 8 command-line bug-reporting date coreutils

如果日期代码表示任何一年 3 月最后一个星期日的 2:00:00AM 到 2:59:59AM,touch -t 会给我“无效的日期格式”错误(我已经检查过 2023,2014,2016,2018 )。核心实用程序中这种奇怪的现象让我大吃一惊。这是一些已知的错误吗?有解决方法吗?

\n

例子:

\n
$ touch -t 201603270159.59 myfile.txt #1:59AM works\n$ touch -t 202303260200.00 myfile.txt #2:00AM fails\ntouch: invalid date format \xe2\x80\x98202303260200.00\xe2\x80\x99\n$ touch -t 201603270259.59 myfile.txt #2:59AM fails\ntouch: invalid date format \xe2\x80\x98201603270259.59\xe2\x80\x99\n$ touch -t 201603270300.00 myfile.txt #3:00AM works\n$ touch -t 202303270200.00 myfile.txt #2:00AM the next day works\n
Run Code Online (Sandbox Code Playgroud)\n

(这些内容为 YYYYMMDDHHMM.SS)。

\n

我接触了 5000 个文件的集合,这些文件的时间戳可追溯到 12 年前。这是触摸失败的日期时间戳列表。问题日期始终是三月的最后一个星期日

\n
touch -t 201403300248.57 fileA.txt\ntouch -t 201403300251.21 fileB.txt\ntouch -t 201403300253.03 fileC.txt\ntouch -t 201603270252.42 fileD.txt\ntouch -t 201603270234.43 fileE.txt\ntouch -t 201803250223.39 fileF.txt\n
Run Code Online (Sandbox Code Playgroud)\n

如果我使用 touch -d,该错误仍然存​​在。例如:

\n
$ touch -d "2016-03-27 02:34:43" myfile.txt\ntouch: invalid date format \xe2\x80\x982016-03-27 02:34:43\xe2\x80\x99\n
Run Code Online (Sandbox Code Playgroud)\n

我使用的是 Ubuntu 22.04.03。这种情况发生在 bash、csh、sh shell 上。

\n

Win*_*nix 11

在夏令时过渡期间,02:00 到 02:59 的时间不存在。

Linux/Ubuntu 使用 UTC 内部跟踪时间,UTC 不遵守夏令时,并且运行良好。转换为当地时间时,02:00 和 02:59 之间会有一个空档。