JodaTime 和夏令时

问题描述

我开发了一个自定义日程表,有 30 分钟的间隔,所以当我通过添加 30 分钟来生成它时:

date = date.plusMinutes(minuteStep)

所以在我们的时区切换到夏令时的那一刻,jodatime 将 1 小时添加到当前时间,在这种情况下,我的日程安排被破坏了,可以排除这个偏移量吗?。谢谢

示例:

2021-03-28T00:00:00.000+02:00
2021-03-28T00:30:00.000+02:00
2021-03-28T01:00:00.000+02:00
2021-03-28T01:30:00.000+02:00

在这之后我得到了:

2021-03-28T03:00:00.000+03:00

解决方法

看起来您正在使用 org.joda.time.DateTime,这是该要求的错误类。此要求的正确类是 org.joda.time.LocalDate

org.joda.time.LocalTime 可用于表示基于人的日期时间,例如电影时间,或当地图书馆的开馆和闭馆时间,或创建数字时钟等。LocalDateTime,一个LocalDate 与 LocalTime 的组合可用于表示特定事件,例如美洲杯挑战者系列赛中路易威登杯决赛的第一场比赛,该比赛于下午 1:10 开始2013 年 8 月 17 日。请注意,这意味着下午 1:10。在当地时间。 (Source)

切换到 org.joda.time.LocalDate 应该可以解决问题。但是,请查看 Home Page of Joda-Time

上的以下通知

Joda-Time 是 Java 的事实上的标准日期和时间库 在 Java SE 8 之前。现在要求用户迁移到 java.time (JSR-310)。

因此,我建议您切换到 modern date-time API* 。您可以从 Trail: Date Time 了解现代日期时间 API。


* 出于任何原因,如果您必须坚持使用 Java 6 或 Java 7,您可以使用 ThreeTen-Backport,它将大部分 java.time 功能向后移植到 Java 6 & 7. 如果您正在为 Android 项目工作并且您的 Android API 级别仍然不符合 Java-8,请检查 Java 8+ APIs available through desugaringHow to use ThreeTenABP in Android Project

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...