我有一个运行在Linux上的shell脚本,它使用这个调用来获取YYYY-MM-DD
格式的昨天的日期:
date -d "1 day ago" '+%Y-%m-%d'
它在大多数情况下都是有效的,但是当脚本昨天早上在2013-03-11 0:35 CDT
上运行时,它返回了"2013-03-09"
而不是"2013-03-10"
。
想必夏令时(昨天开始)是罪魁祸首。我猜"1 day ago"
的实现方式是减去24小时,在2013-03-11 0:35 CDT
是2013-03-09 23:35 CST
之前的24小时,这导致了"2013-03-09"
的结果。
那么,在Linux上的bash中获取昨天的日期有什么好的DST安全方法呢?
发布于 2013-03-13 08:23:14
我认为这应该是有效的,无论你运行它的频率和时间是多少……
date -d "yesterday 13:00" '+%Y-%m-%d'
发布于 2013-03-13 08:24:26
这也应该是可行的,但可能太多了:
date -d @$(( $(date +"%s") - 86400)) +"%Y-%m-%d"
发布于 2013-03-13 08:30:25
如果您确定脚本在一天中的第一个小时运行,您可以简单地执行以下操作
date -d "12 hours ago" '+%Y-%m-%d'
顺便说一句,如果脚本每天在00:35运行(通过crontab?)您应该问问自己,如果DST更改在那个小时内发生,会发生什么;脚本不能运行,在某些情况下会运行两次。不过,在这方面,cron
的现代实现是quite clever的。
https://stackoverflow.com/questions/15374752
复制相似问题