我想在我的 Android 应用程序中执行日期操作。我想要的是减去两个日期并得到结果。但是每当我将时区更改为中央夏令时时,减法都会导致错误的结果。
我使用以下代码找出两个日期之间的差异。
Long lDateDiff = dtCycleDay.getTime() - m_dtHistory[0].getTime();
lDateDiff = lDateDiff / (1000 * 60 * 60 * 24);
在 m_dtHistory[0]
中,存储的日期是 Thu Mar 01 00:00:00 CST 2012
。
在我的 dtCycleDay
变量中,日期从 Thu Mar 01 00:00:00 CST 2012
、Thu Mar 02 00:00:00 CST 2012
、Thu Mar 03 00:00:00 CST 2012
...等等。
现在到 Thu Mar 11 00:00:00 CST 2012
,减法结果没问题,但是当日期更改为 Thu Mar 12 00:00:00 CDT 2012
,CST
变为CDT
并显示错误的减法结果。
为什么会发生这种情况,而这些只有在我将时区更改为中部夏令时或太平洋夏令时时才会发生。
最佳答案
“错误的”减法结果是什么意思?
我的猜测是结果是 23 小时或 25 小时 - 这正是我在日光过渡发生时预期的结果,因为中间的一天更长或更短的时间。 “较长”的一天除以 24 时无关紧要,但较短的一天会......你假设每一天都有 24 小时,因此你可以通过将经过的毫秒数除以来计算天数“24 小时内的毫秒数”。由于白天长度不同,这不起作用。
不要忘记 Date
值纯粹是一个瞬间。它不知道日历或时区......如果你想知道“本地”日期和时间的差异(午夜到午夜总是 24 小时),我建议使用 Joda Time相反... Date
和 Calendar
并不是真正为您做的。
如果您描述的真正问题是时区在错误的日期更改,那完全是另一回事,可能是由各种不同的原因造成的。一方面,您应该准确显示您正在谈论的时区:缩写是模棱两可的,而 tzdb 名称(例如“欧洲/巴黎”)则不是。
关于java - android中日期差异的错误结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9768322/