GNU 日期纪元 +%s 与现在在时间戳短语中的计算(包括月份)?

GNU 日期纪元 +%s 与现在在时间戳短语中的计算(包括月份)?

我试图在 shell 脚本中使用带时间戳短语的 gnu 日期进行日期计算,但无法解释这些差异。有人可以启发我吗?这是一个错误吗?

% date -u -d "now"
Fri Aug  2 15:07:16 UTC 2013

% date -u -d "1970-01-01 00:00:00 UTC  + `date +%s` seconds"
Fri Aug  2 15:07:29 UTC 2013

% date -u -d "now -6 months -1 day"
Fri Feb  1 15:07:52 UTC 2013

% date -u -d "1970-01-01 00:00:00 UTC  + `date +%s` seconds -6 months -1 day"
Tue Jan 29 15:08:03 UTC 2013

我预计最后一个的含义与之前的完全相同,因为 %s 在联机帮助页中被定义为“自 1970-01-01 00:00:00 UTC 以来的秒数”。

答案1

看来是操作顺序错误。如果我执行此命令,它会正常工作:

$ date -u -d "$(date -u -d "1970-01-01 00:00:00 UTC  + `date +%s` seconds") \
     -6 months -1 day"

运行这个会产生奇怪的结果:

$ date -u -d "$(date +%s) seconds -6 months -1 day"
Sun Sep  3 07:48:54 UTC 2056

$(date +%s) seconds用括号保护似乎可以解决这个问题:

$ date -u -d "($(date +%s) seconds) -6 months -1 day"
Fri Feb  1 15:55:12 UTC 2013

相关内容