我试图在 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