JodaTime 和夏令时

JodaTime and Daylight saving time

提问人:Александр Волошиновский 提问时间:3/25/2021 最后编辑:Arvind Kumar AvinashАлександр Волошиновский 更新时间:3/28/2021 访问量:494

问:

我开发了一个自定义的日程安排日历,间隔 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
Kotlin Java-Time Android-JodaTime

评论

1赞 deHaar 3/25/2021
我认为你的日程安排没有被打破。相反,它认为当天没有凌晨 2 点(当夏令时使一小时消失时,时钟直接从凌晨 1:59 到凌晨 3 点)。
0赞 deHaar 3/26/2021
好吧,如果你真的想忽略偏移量,请使用 a(不知道 JodaTime 中是否有等效项)。java.time.LocalDateTime
0赞 Anonymous 3/28/2021
但是在01:30之后半小时,已经是03:00了。你是说你想安排不存在的时间吗?为什么?
1赞 Anonymous 3/28/2021
@deHaar 正如答案所说,有一个同名的等价物。java.time.LocalDateTimeorg.joda.time.LocalDateTime
0赞 Anonymous 3/29/2021
或者换个角度问:你想要的输出到底是什么?请为每个所需的输出时间同时提供时间和 UTC 偏移量(如果我正确理解您想要两者)。

答:

1赞 Arvind Kumar Avinash 3/28/2021 #1

看起来您正在使用此要求的错误类。满足此要求的正确类是 。org.joda.time.DateTimeorg.joda.time.LocalDate

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

切换到应该可以解决问题。但是,请在Joda-Time的主页上查看以下通知org.joda.time.LocalDate

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

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


* 无论出于何种原因,如果你必须坚持使用 Java 6 或 Java 7,你可以使用 ThreeTen-Backport,它将大部分 java.time 功能向后移植到 Java 6 和 7。如果您正在为 Android 项目工作,并且您的 Android API 级别仍然不符合 Java-8,请查看通过脱糖提供的 Java 8+ API如何在 Android 项目中使用 ThreeTenABP