bash日期和时间算术的奇怪行为

Pie*_*ois 4 bash time

当我发出bash命令时:

date --date="2018-03-03 12:16:13 -1hour" "+%Y:%m:%d %H:%M:%S"
Run Code Online (Sandbox Code Playgroud)

我希望结果是:

2018:03:03 11:16:13
Run Code Online (Sandbox Code Playgroud)

但相反,我得到:

2018:03:03 15:16:13
Run Code Online (Sandbox Code Playgroud)

我想知道这是否与时区有关,以及如何避免这种行为.

gle*_*man 5

我可以重现这个.我的时区是America/New_York

$ date --date="2018-03-03 12:16:13 - 1 hour" "+%Y:%m:%d %H:%M:%S"
2018:03:03 09:16:13
$ env TZ='Europe/Belgrade' date --date="2018-03-03 12:16:13 - 1 hour" "+%Y:%m:%d %H:%M:%S"
2018:03:03 15:16:13
Run Code Online (Sandbox Code Playgroud)

解析器似乎-1将时区GMT + 01:00作为时区,然后将转换为您当地的时区.

如果我们重新排列短语以避免时区解析歧义,我们可以得到您想要的结果:

$ date --date="- 1 hour 2018-03-03 12:16:13" "+%Y:%m:%d %H:%M:%S"
2018:03:03 11:16:13
Run Code Online (Sandbox Code Playgroud)