【问题标题】:Joda-time Period doesn't seem to calculate days correctlyJoda-time Period 似乎无法正确计算天数
【发布时间】:2017-03-06 19:21:00
【问题描述】:

我在 Joda-time Period 类周围看到一些奇怪的行为——特别是处理天数。在以下示例代码中,我将 26 小时的周期指定为毫秒。

// 26 hour duration
long durationMillis = 26 * 3600 * 1000;
Period period = new Period(durationMillis, PeriodType.dayTime());
// this fails because days == 0
assertEquals(1, period.getDays());
// this would fail because hours == 26
assertEquals(2, period.getHours());

我原以为 Period 会看到 26 小时是 1 天 2 小时,但它似乎没有认识到一天 == 24 小时。

知道我做错了什么吗?

【问题讨论】:

    标签: java jodatime period


    【解决方案1】:

    事实证明,Joda-time 是邪恶的 smaaaaart。我猜由于夏令时和其他时区问题,它无法知道一天中的小时数。例如,任何特定的一天都可能有 23 或 25 个小时。

    要将其强制为每天 24 小时,您需要指定一个Chronology,它与每天的小时数保持一致。

    long durationMillis = 26 * 3600 * 1000;
    Period period = new Period(durationMillis, PeriodType.dayTime(),
        ISOChronology.getInstanceUTC());
    //  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ this is needed to have 1 day == 24 hours
    // this works!
    assertEquals(1, period.getDays());
    // this works!
    assertEquals(2, period.getHours());
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-14
      • 1970-01-01
      相关资源
      最近更新 更多