Joda时间,期间从millis

时间:2012-01-15 19:30:29

标签: java jodatime

我正在尝试使用“millis”构造函数设置我的Period对象,并相应地更新所有相关字段(年,月,周,日,小时,分钟,秒)

即使用以下代码:

mPeriod = new Period(millis, PeriodType.standard());

未相应填写所有相关字段。 只有几周和几分钟(输入毫升为1325965615539

有人可以帮我解决这个问题吗?

1 个答案:

答案 0 :(得分:1)

您可以使用Period#normalizedStandard();

对其进行标准化

但是,Period无法“填写所有相关字段”,因为它无法假设数月或数年的天数。它能做的最好的事情就是把它变成数周,日和时间字段。

Javadoc对此有所了解,但并未详细说明:

  

如果期限包含年份或月份,那么月份将是   标准化为0到11之间。字段和以下字段将是   必要时归一化,但不会溢出   月场。因此,1年15个月的期限将标准化为2   3个月。但是1个月40天的时间仍然是1个月   40天。

(强调我的)

如果您需要将其标准化为数年和数月,则需要使用这些字段中的值构建Period

或者,您可以使用Duration

  1. 构建一个Duration毫秒
  2. 使用Duration#toPeriodFrom(ReadableInstant)从给定时刻开始创建Period(例如新DateTime())。根据文档,这应该工作:

      

    此转换将准确确定期间的字段。该   结果是基于瞬间millis,年表   即时,标准期间类型和持续时间的长度。


  3. 以下是normalize()应该对您的毫秒输入做的事情:

    import org.joda.time.Period;
    
    class Normalize {
            public static void main(String[] args) {
                    Period period = new Period(1325965615539L);
                    System.out.println(period);
                    System.out.println(period.normalizedStandard());
            }
    }
    
    // outputs
    PT368323H46M55.539S
    P2192W2DT19H46M55.539S
    

    请注意第二行已规范化,但最多只能持续数周。