将JodaTime持续时间转换为Java 8持续时间:getStandardMinutes和其他方法

时间:2019-11-04 14:24:57

标签: java jodatime java-time

由于我们所在的时区有些怪异,我们正尝试将使用Joda-Time库编写的产品转换为Java时间。 (夏令时DST从未保持一致,Joda-Time需要特殊的操纵并使用偏移量才能使其正常工作。)

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

在Java 8+ java.time Duration上是否有一种简单的方法来实现相同的功能?我假设基于代码和注释,Duration::toMinutes不一定会返回所需的值。

2 个答案:

答案 0 :(得分:4)

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

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

来自javadoc:

  

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

     

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

     

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

答案 1 :(得分:2)

java.time.Duration =纳秒计数

TreffnonX already answered一样, java.time 中的Duration表示未附加到时间轴上的时间跨度,其范围为24小时制(无考虑日历),小时,分钟,秒和几分之一秒。换句话说, java.time.Duration只是几纳秒的计数,其中包含许多便捷的方法。

时间跨度课程

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

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

Table of span-of-time classes in Java and in the ThreeTen-Extra project