java - android中日期差异的错误结果

标签 java android

我想在我的 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 2012Thu 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 2012CST 变为CDT 并显示错误的减法结果。

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

最佳答案

“错误的”减法结果是什么意思?

我的猜测是结果是 23 小时或 25 小时 - 这正是我在日光过渡发生时预期的结果,因为中间的一天更长或更短的时间。 “较长”的一天除以 24 时无关紧要,但较短的一天会......你假设每一天都有 24 小时,因此你可以通过将经过的毫秒数除以来计算天数“24 小时内的毫秒数”。由于白天长度不同,这不起作用。

不要忘记 Date纯粹是一个瞬间。它不知道日历或时区......如果你想知道“本地”日期和时间的差异(午夜到午夜总是 24 小时),我建议使用 Joda Time相反... DateCalendar 并不是真正为您做的。

如果您描述的真正问题是时区在错误的日期更改,那完全是另一回事,可能是由各种不同的原因造成的。一方面,您应该准确显示您正在谈论的时区:缩写是模棱两可的,而 tzdb 名称(例如“欧洲/巴黎”)则不是。

关于java - android中日期差异的错误结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9768322/

相关文章:

c# - 如何获得当前可用的 Java 版本?

android - 无法解析 : androidx. 生命周期 :lifecycle-extensions-ktx:2. 0.0-alpha1

安卓 : Stopping works Widget when user removes app from recent tasks list

android - 如何让gradle使用所有Android Studio项目的缓存依赖项?

java - JPA/validation @ManyToOne 关系不应创建新行

java - 如何找到模式的后半部分?

android - 如何更改进度对话框的背景颜色?

android - 沉浸式模式 Activity 转换

java - 无法实例化实现: AstyanaxStoreManager

java - Spring WebFlux过滤器在请求对象反序列化后拦截请求