夏令时 plusHours 和 plusDays 之间的时间差

Posted

技术标签:

【中文标题】夏令时 plusHours 和 plusDays 之间的时间差【英文标题】:JodaTime difference between plusHours and plusDays for Daylight Savings Time 【发布时间】:2015-01-08 11:36:03 【问题描述】:

根据 JodaTime Javadoc,plusHours 和 plusDays 在将时间添加到日期时都会处理 DST 调整。但是,根据我的测试,增加一天的时间与增加 1 天的时间会产生不同的结果。有人可以向我解释一下为什么下面的代码会给出下面的输出吗?

代码:

SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ");
Date date = format.parse("2014-11-01T02:00:00.000-0700");

System.out.println("origDate:  " + date);
System.out.println("plusDays:  " + new DateTime(date).plusDays(1).toDate());
System.out.println("plusHours: " + new DateTime(date).plusHours(24).toDate());

输出:

origDate:  Sat Nov 01 02:00:00 PDT 2014
plusDays:  Sun Nov 02 02:00:00 PST 2014
plusHours: Sun Nov 02 01:00:00 PST 2014

【问题讨论】:

我刚试过你的代码。基本上复制/粘贴,使用 joda-time 2.4,这里是输出: origDate: Sat Nov 01 10:00:00 CET 2014 plusDays: Sun Nov 02 10:00:00 CET 2014 plusHours: Sun Nov 02 10:00:00 2014年中考 你使用的不是纯 Joda-Time,还有SimpleDateFormatjava.util.Date.toString()。为什么?这只是在评估您的代码示例时添加了一个额外的错误源。 @mattias - 这里使用toDateSimpleDateFormat 是应用本地时区。 OP 在美国太平洋时间运行。 @MattJohnson:谢谢澄清。时区处理总是很棘手:) 【参考方案1】:

并非所有当地时间都有 24 小时。假设您在美国太平洋时区工作,那一天有 25 小时,这是由于夏令时转换的后备。

调用 plusHours(24) 会增加 24 小时的准确持续时间。

调用plusDays(1) 会增加日历日,即使这一天不完全是 24 小时。

【讨论】:

以上是关于夏令时 plusHours 和 plusDays 之间的时间差的主要内容,如果未能解决你的问题,请参考以下文章

中国有夏令时和冬令时吗?

计算夏令时和非夏令时之间的时间差

UTC 时间、时区、夏令时和夏令时切换日期

LON 和 SYD 之间的时差为 9 小时,夏令时

各种时间格式(UTC、GMT等)及夏令时和冬令时

带有时区和夏令时的纪元的日期和时间(以秒为单位)