其实我在我的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,显示错误的减法结果。
为什么会发生这种情况,只有当我将时区更改为中央夏令时或太平洋夏令时时才会发生这种情况。
答案 0 :(得分:3)
“错误”的减法结果是什么意思?
我的猜测是结果是23小时或25小时 - 这正是我在日光转换发生时期望的,因为干预日 更长或者在经过的时间方面更短。 “更长”的一天在除以24时不相关,但是较短的一天将......你假设每天都有24小时,因此你可以通过除以经过的毫秒数来计算天数。 “24小时内的毫秒数”。由于日长不同,这不起作用。
不要忘记Date
值纯粹及时。它不知道日历或时区...如果你想知道“本地”日期和时间的差异(午夜到午夜总是24小时),我建议改为使用Joda Time。 .. Date
和Calendar
并不是真的那样做。
如果你所描述的真正问题是时区在错误的日期发生变化,那完全是另一回事,可能是由于各种不同的原因造成的。首先,你应该准确地显示你正在谈论的时区:缩写是不明确的,而tzdb名称(例如“欧洲/巴黎”)不是。