由于我们所在的时区有些怪异,我们正尝试将使用Joda-Time库编写的产品转换为Java时间。 (夏令时DST从未保持一致,Joda-Time需要特殊的操纵并使用偏移量才能使其正常工作。)
我正在与Joda-Time的Duration
合作。有许多方法,例如getStandardMinutes
。
在Java 8+ java.time Duration
上是否有一种简单的方法来实现相同的功能?我假设基于代码和注释,Duration::toMinutes
不一定会返回所需的值。
答案 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-time和ThreeTen-Extra)均由同一人Stephen Colebourne领导。