【问题标题】:JodaTime and Daylight saving timeJodaTime 和夏令时
【发布时间】:2021-06-22 09:52:31
【问题描述】:

我开发了一个自定义日程日历,有 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

【问题讨论】:

  • 我认为您的日程安排没有中断。相反,它认为当天没有凌晨 2 点(当夏令时使一小时消失时,时钟从凌晨 1:59 直接转到凌晨 3 点)。
  • 好吧,如果您真的想忽略偏移量,请使用java.time.LocalDateTime(不知道JodaTime 中是否有等效项)。
  • 但是在 01:30 后半小时 03:00。你是说你想安排不存在的时间吗?为什么?
  • @deHaar 正如答案所说,org.joda.time.LocalDateTime 中有一个与 java.time.LocalDateTime 同名的等价物。
  • 或者换个说法:确切地说你想要的输出是什么?请为每个所需的输出时间提供时间和 UTC 偏移量(如果我理解正确,你想要两者)。

标签: android kotlin jodatime java-time android-jodatime


【解决方案1】:

您使用的 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

【讨论】:

    猜你喜欢
    • 2012-11-25
    • 2023-03-18
    • 2012-10-23
    • 2016-02-02
    • 2010-09-19
    • 2017-04-29
    • 2016-10-11
    • 2014-02-22
    • 2019-04-09
    相关资源
    最近更新 更多