【问题标题】:Converting JodaTime Duration to Java 8 time Duration: getStandardMinutes and other methods将 Joda Time Duration 转换为 Java 8 时间 Duration:获取标准分钟和其他方法
【发布时间】:2020-02-29 21:17:30
【问题描述】:

由于我们国家的时区问题,我们正在尝试将使用 Joda-Time 库编写的产品转换为 Java 时间。 (夏令时 DST 永远不会一致,Joda-Time 需要特殊操作并使用偏移量才能使其正常工作)。

我正在与 Joda-Time 的 Duration 合作。有许多方法,例如getStandardMinutes

有没有一种简单的方法可以在 Java 8+ java.time Duration 上实现相同的功能?我根据代码和 cmets 假设 Duration::toMinutes 不一定会返回所需的值。

【问题讨论】:

    标签: java jodatime java-time


    【解决方案1】:

    在 Java 8 的 Duration 类中,持续时间不包含参考日期。因此,您将提取的所有分钟都是标准分钟。在 JodaTime 中,getStandardXXX 的 cmets 明确指定 Duration 假定默认的一天长度(24 小时/天、60 分钟/小时、60 秒/分钟 ...)。然而,这只是相关的,如果您想将持续时间应用于参考(日期)时间(例如,将此 Duration 添加到此 DateTime),在这种情况下,将“天”添加到翻转的日期夏令时可能会产生意想不到的效果(如小时偏移)。但是,对于Duration 对象,这是无关紧要的,因为它有效地表示“实时”中以纳秒为单位的持续时间,而忽略时区等。

    本质上,您可以使用toMinutes() 来获取确切的分钟数作为long 值。

    来自 javadoc:

    获取此持续时间的分钟数。

    这会通过将秒数除以 60 来返回持续时间的总分钟数。

    此实例是不可变的,不受此方法调用的影响。

    【讨论】:

    • 优秀。非常感谢@TreffnonX。
    【解决方案2】:

    java.time.Duration = 纳秒计数

    作为TreffnonX already answeredjava.time 中的Duration 表示不附加到时间轴的时间跨度,以 24 小时天为单位(不考虑日历) 、小时、分钟、秒和几分之一秒。换句话说,一个 java.time.Duration 只是一个纳秒计数,有一堆方便的方法。

    跨时间课程

    这是我制作的一个图形表,可帮助您了解 Java 8 及更高版本中内置的各种跨时间类,以及 ThreeTen-Extra 库中的类。

    仅供参考,所有三个项目(Joda-Time,java-timeThreeTen-Extra)都由同一个人领导,Stephen Colebourne

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-02-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-21
      • 1970-01-01
      相关资源
      最近更新 更多