【发布时间】:2019-11-14 18:32:20
【问题描述】:
我正在尝试从 Period 对象实例中获取 total 毫秒数(不是 millis 字段)。我已经尝试了多次转换,因为我找不到任何容易提供它的方法。
有没有人需要它并设法找回它?
(我的补丁需要这个,以找出负周期;负毫秒 = 负周期。)
【问题讨论】:
我正在尝试从 Period 对象实例中获取 total 毫秒数(不是 millis 字段)。我已经尝试了多次转换,因为我找不到任何容易提供它的方法。
有没有人需要它并设法找回它?
(我的补丁需要这个,以找出负周期;负毫秒 = 负周期。)
【问题讨论】:
您不能直接从 Period 获取毫秒,因为像月和年这样的字段以毫秒为单位是可变的。
为了完成这项工作,您需要提供一个“基线”时刻,Period 可以从中计算出实际的毫秒持续时间。
例如,Period.toDurationFrom 和 Period.toDurationTo 方法采用这样一个基线时刻,并计算一个 Duration 对象,然后您可以获得毫秒。
toDurationFrom 的 Javadoc 表示:
获取此时间段相对于开始时刻的总毫秒持续时间。 此方法将周期添加到指定的时刻以计算持续时间。
随着时间段的持续时间变化,必须提供瞬间。例如,由于月份长度不同,1 个月的时间段可能在 28 到 31 天(以毫秒为单位)之间变化。同样,在夏令时转换时,一天可能会有所不同,通常在 23 到 25 小时之间。
因此,您需要为您的应用程序选择一个合适的基线时刻。
【讨论】:
toStandardDuration().toMillis() 是一个很好的近似值,如果您不期望任何奇怪的话。
toStandardDuration().getMillis()
如果您想从特定时间获取毫秒,可以使用 DateTime 类的 plus() 或 minus() 方法来完成。
例如从现在
获取毫 DateTime start = new DateTime(); //NOW
DateTime end = start.plus(<your period>);
long millis = end.getMillis() - start.getMillis();
【讨论】:
使用 Joda 时间 2.3,它是:
toStandardDuration().getMillis()
【讨论】: