Joda时间,毫秒期间

问题描述:

我试图使用“millis”构造函数设置我的Period对象并且相应地更新所有相关字段(年,月,周,天,小时,分钟,秒)Joda时间,毫秒期间

也就是说,使用下面的代码:

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

不填写相应的所有相关领域。 只有几个星期和几分钟(输入millis的1325965615539

有人可以帮我把这件事情弄清楚吗?

可以使用Period#normalizedStandard();

但是它正常化,有没有办法可以Period“在所有相关领域补”,因为它不能对天数假设在几个月或几年。它能做的最好的就是把它变成几周,几天和时间的领域。

在此的Javadoc接触,但不是很详细:

如果期间包含年或月,那么月将 规范化为介于0和11天的现场及以下根据需要归一化为 ,但这个不会溢出到 个月字段。因此,1年15个月的时间将正常化为3个月的2 年。但是1个月40天的期限将保持为1个月,40天内为 。

(重点煤矿)

如果你需要它归到年和月,你需要构建Period与这些字段的值。

或者,你可以使用一个Duration

  1. 构建Duration以毫秒
  2. 使用Duration#toPeriodFrom(ReadableInstant)在给定的时间瞬间打造Period开始(例如新DateTime())。根据该文档,这应该工作:

    这种转换将决定一个时期的领域准确。 结果基于瞬时毫秒,瞬时的时间顺序,标准周期类型和此持续时间的长度。


这里是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 

通知第二条线被归,但最多只能到几周。

+0

正常化没有任何效果,它没有做任何事情...... – Droritos 2012-01-15 19:45:46

+0

@DrorWeiss - 它可能有效果,但可能不是你所期待的。我更新了我的答案,以澄清原因。 – 2012-01-15 19:57:37