2017-08-04 94 views
1

我在Linux上,我试图使用日期工具有一定的天数,小时和分钟来加入指定的日历日期:添加时间在Linux中日历日期给出不正确的结果

例如:

$ date -d "2013-01-01 + 305 days 12 hours 30 minutes" +"%Y%m%d%0k%M%S" 
20131102123000 

分裂的结果了,因此更容易为我们阅读:

2013-11-02 12:30:00 

这似乎是正常工作。然而,当我加306天而不是305:

$ date -d "2013-01-01 + 306 days 12 hours 30 minutes" +"%Y%m%d%0k%M%S" 
20131103113000 

斯普利特:

2013-11-03 11:30:00 

通知小时,现在是如何显示的11而不是12!但我告诉它添加12小时,让我增加一天一次:

$ date -d "2013-01-01 + 307 days 12 hours 30 minutes" +"%Y%m%d%0k%M%S" 
20131104123000 

而且再次分裂的结果:

2013-11-04 12:30:00 

现在时间追溯到我的预期。我已经使用日期版本8.12和8.4测试过了,两者都发生了相同的结果。我究竟做错了什么?

+1

可能是因为夏令时发生了变化。检查时区,并将'%z%Z'添加到'日期'模式以查看正在使用的时区 – 2017-08-04 17:02:28

+1

这绝对是由于2013年11月3日发生的DST切换所致https://www.timeanddate.com/时间/变化/美国/纽约?年= 2013 – JNevill

+0

你们回答了。我试图从UTC日期添加,但该工具正在将我的请求解释为本地时区。这将解释DST开关。 – LTClipp

回答

1

我试图从UTC日期添加,但我没有指定这个工具。这是解决方案:

date --utc -d "2013-01-01 + 307 days 12 hours 30 minutes" +"%Y%m%d%0k%M%S" 

因为UTC不遵守DST,所以在小时内不会发生变化。