【问题标题】:Joda time, Period to total millisJoda time, Period to total millis
【发布时间】:2019-11-14 18:32:20
【问题描述】:

我正在尝试从 Period 对象实例中获取 total 毫秒数(不是 millis 字段)。我已经尝试了多次转换,因为我找不到任何容易提供它的方法。

有没有人需要它并设法找回它?

(我的补丁需要这个,以找出负周期;负毫秒 = 负周期。)

【问题讨论】:

    标签: java jodatime


    【解决方案1】:

    您不能直接从 Period 获取毫秒,因为像月和年这样的字段以毫秒为单位是可变的。

    为了完成这项工作,您需要提供一个“基线”时刻,Period 可以从中计算出实际的毫秒持续时间。

    例如,Period.toDurationFromPeriod.toDurationTo 方法采用这样一个基线时刻,并计算一个 Duration 对象,然后您可以获得毫秒。

    toDurationFromJavadoc 表示:

    获取此时间段相对于开始时刻的总毫秒持续时间。 此方法将周期添加到指定的时刻以计算持续时间。

    随着时间段的持续时间变化,必须提供瞬间。例如,由于月份长度不同,1 个月的时间段可能在 28 到 31 天(以毫秒为单位)之间变化。同样,在夏令时转换时,一天可能会有所不同,通常在 23 到 25 小时之间。

    因此,您需要为您的应用程序选择一个合适的基线时刻。

    【讨论】:

    • 知道了:DateTime 零 = new DateTime(0); long millis = period.toDurationFrom(zero).getMillis();
    • @DrorWeiss:这只适用于相对较短的时期。如果您开始使用超过一个月的月经,那么这可能会给您带来扭曲的结果。
    • 我已经测试过了.. 到目前为止看起来不错。不过,我会保持警惕。谢谢 ! ;)
    • toStandardDuration().toMillis() 是一个很好的近似值,如果您不期望任何奇怪的话。
    • 在我的 joda time (2.3) 版本中,它似乎是:toStandardDuration().getMillis()
    【解决方案2】:

    如果您想从特定时间获取毫秒,可以使用 DateTime 类的 plus() 或 minus() 方法来完成。

    例如从现在

    获取毫
     DateTime start = new DateTime();  //NOW
     DateTime end = start.plus(<your period>);
     long millis = end.getMillis() - start.getMillis();
    

    【讨论】:

      【解决方案3】:

      使用 Joda 时间 2.3,它是:

      toStandardDuration().getMillis()
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-03-06
        • 1970-01-01
        • 2014-08-22
        • 1970-01-01
        • 2014-01-31
        • 1970-01-01
        • 1970-01-01
        • 2020-07-08
        相关资源
        最近更新 更多