我正在尝试使用“millis”构造函数设置我的Period对象,并相应地更新所有相关字段(年,月,周,日,小时,分钟,秒)
即使用以下代码:
mPeriod = new Period(millis, PeriodType.standard());
未相应填写所有相关字段。
只有几周和几分钟(输入毫升为1325965615539
)
有人可以帮我解决这个问题吗?
答案 0 :(得分:1)
您可以使用Period#normalizedStandard();
但是,Period
无法“填写所有相关字段”,因为它无法假设数月或数年的天数。它能做的最好的事情就是把它变成数周,日和时间字段。
Javadoc对此有所了解,但并未详细说明:
如果期限包含年份或月份,那么月份将是 标准化为0到11之间。字段和以下字段将是 必要时归一化,但不会溢出 月场。因此,1年15个月的期限将标准化为2 3个月。但是1个月40天的时间仍然是1个月 40天。
(强调我的)
如果您需要将其标准化为数年和数月,则需要使用这些字段中的值构建Period
。
或者,您可以使用Duration
:
Duration
毫秒使用Duration#toPeriodFrom(ReadableInstant)
从给定时刻开始创建Period
(例如新DateTime()
)。根据文档,这应该工作:
此转换将准确确定期间的字段。该 结果是基于瞬间millis,年表 即时,标准期间类型和持续时间的长度。
以下是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
请注意第二行已已规范化,但最多只能持续数周。