这会将给定的日期时间转换为纪元时间(秒)
date -d"2015-07-24 11:29:00" +%s
// gives 1437762540
现在我想做同样的事情,但减去一天。通常,这就像添加“ - 1天”一样简单。但是,它实际上增加了一天,而不是减去一天。
date -d"2015-07-24 11:29:00 - 1 day" +%s
// gives 1437848940 (notice, this value is great than the one above)
如果我从时间戳中删除时间部分,那就很有效。然而,时间部分似乎打破了它。我知道我可以通过两个单独的步骤来完成这个并避免这个问题。但是,我希望能在一个命令中完成它。这可能吗?
答案 0 :(得分:3)
date
命令中有一些关于如何解释日期字符串中的- 1
标记的含糊不清。它将其解析为时区规范
$ date -d "2015-07-24 11:29:00 -1"
Fri Jul 24 08:29:00 EDT 2015
$ date -d "2015-07-24 11:29:00 UTC-1"
Fri Jul 24 08:29:00 EDT 2015
$ date -d "2015-07-24 11:29:00 - 2"
Fri Jul 24 09:29:00 EDT 2015
$ date -d "2015-07-24 11:29:00 UTC-2"
Fri Jul 24 09:29:00 EDT 2015
$ TZ=UTC date -d "2015-07-24 11:29:00 -1"
Fri Jul 24 12:29:00 UTC 2015
(您的结果可能会因TZ
设置而异)
然后day
部分被解释为意味着添加一天
$ date -d "2015-07-24 11:29:00 - 1 day"
Sat Jul 25 12:29:00 EDT 2015
$ date -d "2015-07-24 11:29:00 UTC-1 + 1 day"
Sat Jul 25 12:29:00 EDT 2015
为@amdixon建议的日期字符串添加时区规范,以解决歧义并获得预期结果。
答案 1 :(得分:1)
供参考,GNU coreutils信息页面为"日期输入格式":https://www.gnu.org/software/coreutils/manual/html_node/Date-input-formats.html
我没有准确的答案。我知道自由格式的日期时间解析很难。玩弄日期:
$ date -d"2015-07-24 11:29:00 - 1 day" "+%F %T"
2015-07-25 08:29:00
$ date -d"2015-07-24 - 1 day" "+%F %T"
2015-07-23 00:00:00
$ date -d"11:29:00 - 1 day" "+%F %T"
2015-07-25 08:29:00
$ date -d"2015-07-24 - 1 day 11:29:00" "+%F %T"
2015-07-23 11:29:00
因此,从日期减去一天似乎有效,但从一个时间减去一天是有问题的。