【发布时间】:2018-03-28 02:09:35
【问题描述】:
我的班级有一个方法可以计算两个日期的每小时持续时间。
public static double getDuration(Date startDate, Date endDate){
return (endDate.getTime()-startDate.getTime()) / (1000.0 * 60 * 60);
}
我输入的日期是28-10-2017 14:00 和29-10-2017 02:00。在夏令时期间,持续时间为13.0,这是错误的。
如果我用这个输入编写一个简单的程序,我会得到正确的结果。所以只需检查Date 对象。在我的应用程序输入中,它以 dayofWeek 的形式出现,开始日期为 7,结束日期为 1。但是我的简单程序将它作为开始日期的 1 和结束日期的 2。知道这是怎么发生的吗?
【问题讨论】:
-
如何建立输入日期?
-
已经为您完成了。见Java Time Trail
-
为了一切美好的事物,不要试图这样计算日期差异。围绕日期、时间和时区有太多的疯狂,以至于时空结构无法应对另一个“一天总是有 24 小时”的假设。见github.com/kdeldycke/awesome-falsehood#dates-and-time
-
如果你在 JSE7 上,那么joda.org/joda-time
-
假设从 2017-10-29T01:30 到 2017-10-29T00:30 有一个“回退”作为 DST 过渡。这意味着 00:30 和 01:30 之间的时间会发生两次。这意味着 2017-10-28T14:00 和 2017-10-29T02:00 之间的 经过 时间为 13 小时。如果您将每个本地时间转换为 UTC,您应该清楚地看到这一点。如果 00:30 到 01:30 由于“弹簧向前”而被跳过,则会发生相反的情况。
标签: java date dst date-difference