为什么 GNU 日期中的时间会中断“- 1 天”?
Why does having the time in GNU date break "- 1 day"?
这会将给定的日期时间转换为纪元时间(秒)
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)
如果我从我的时间戳中去掉时间部分,效果会很好。然而,时间部分似乎打破了它。我知道我可以分两个单独的步骤来避免这个问题。但是,我希望在一个命令中完成。这可能吗?
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
部分被解释为 add 一天
$ 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 的建议,将时区规范添加到您的日期字符串,以解决歧义并获得预期的结果。
作为参考,"Date input formats" 的 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
所以,从日期中减去一天似乎可行,但从时间中减去一天是有问题的。
这会将给定的日期时间转换为纪元时间(秒)
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)
如果我从我的时间戳中去掉时间部分,效果会很好。然而,时间部分似乎打破了它。我知道我可以分两个单独的步骤来避免这个问题。但是,我希望在一个命令中完成。这可能吗?
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
部分被解释为 add 一天
$ 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 的建议,将时区规范添加到您的日期字符串,以解决歧义并获得预期的结果。
作为参考,"Date input formats" 的 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
所以,从日期中减去一天似乎可行,但从时间中减去一天是有问题的。