Java android中日期差异的错误结果

Java android中日期差异的错误结果,java,android,Java,Android,我想在我的android应用程序中执行日期操作。我想要的是减去两个日期,得到结果。但是,每当我将时区更改为中央夏时制时,减法就会导致错误的结果 我使用以下代码查找这两个日期之间的差异 Long lDateDiff = dtCycleDay.getTime() - m_dtHistory[0].getTime(); lDateDiff = lDateDiff / (1000 * 60 * 60 * 24); 在m_dtHistory[0]中,存储的日期是2012年3月1日星期四00:00:00

我想在我的android应用程序中执行日期操作。我想要的是减去两个日期,得到结果。但是,每当我将时区更改为中央夏时制时,减法就会导致错误的结果

我使用以下代码查找这两个日期之间的差异

Long lDateDiff = dtCycleDay.getTime() - m_dtHistory[0].getTime();
lDateDiff = lDateDiff / (1000 * 60 * 60 * 24);
m_dtHistory[0]
中,存储的日期是
2012年3月1日星期四00:00:00 CST

在我的
dtCycleDay
变量中,日期从2012年3月1日星期四00:00:00 CST,
2012年3月2日星期四00:00 CST
2012年3月3日星期四00:00 CST
。。。等等

现在截至2012年3月11日星期四00:00:00 CST,减法结果良好,但当日期更改为2012年3月12日星期四00:00:00 CDT时,
CST
更改为
CDT
,并显示错误的减法结果

为什么会发生这种情况,而只有当我将时区更改为中央夏时制或太平洋夏时制时才会发生这种情况。

您所说的“错误”减法结果是什么意思

我的猜测是结果是23小时或25小时——这正是我在日光转换发生时所期望的,因为中间的一天在经过的时间上更长或更短。当除以24时,“较长”的一天将不相关,但较短的一天将。。。假设每天都有24小时,因此可以通过将经过的毫秒数除以“24小时内的毫秒数”来计算天数。由于一天的长度不同,这不起作用

不要忘记,
日期
值纯粹是时间上的瞬间。它不知道日历或时区。。。如果您想知道“本地”日期和时间的差异(午夜到午夜总是24小时),我建议使用<代码>日期和
日历
并不是真的为你这样做


如果你所描述的真正问题是时区在错误的日期变化,那完全是另一回事,可能是由于各种不同的原因造成的。首先,你应该准确地显示你所说的时区:缩写词模棱两可,而tzdb名称(如“欧洲/巴黎”)则不模棱两可。

错误的减法结果意味着..当我减去2012年3月11日星期四00:00:00 CST-2012年3月1日星期四00:00:00 CST时。它将返回10。类似地,当我减去2012年3月12日星期四00:00:00时-2012年3月1日星期四00:00:00时,它将返回10而不是11。@Anshuman:对-因为DST转换,你得到了263个小时,而不是264个小时。但截至2012年3月11日星期四00:00:00时,它只会给出2012年3月12日00:00时的完美结果,它显示了错误的结果,是因为时区变为CDT吗?@Anshuman:是的,正是因为我在回答中描述的原因。我建议你仔细重读我的答案。您可以通过四舍五入来解释这一点,也可以使用Joda Time来处理
LocalDate
。(Joda Time是一个更好的日期/时间API。)@Anshuman:你知道在时钟向前的一天,一天实际上只持续23小时吗?这是第一件,也是最重要的事情。一旦你做到了这一点,其他一切都会随之而来。我知道这个问题很久以前就得到了回答。如果有人遇到这种情况,请将您的日期存储在UTC中,并根据本地时区在客户端应用程序中解析它们。