[英]Joda time, Period from millis
我正在尝试使用“millis”构造函数设置我的Period对象,并相应地更新所有相关字段(年,月,周,日,小时,分钟,秒)
也就是说,使用以下代码:
mPeriod = new Period(millis, PeriodType.standard());
没有相应填写所有相关领域。 只有几周和几分钟(输入1325965615539
为1325965615539
)
请有人帮我解决这个问题吗?
您可以使用Period#normalizedStandard();
对其进行Period#normalizedStandard();
但是, Period
无法“填写所有相关字段”,因为它无法对数月或数年的天数进行假设。 它能做的最好的事情就是把它变成数周,日和时间字段。
Javadoc触及了这一点,但没有详细说明:
如果期间包含年份或月份,则月份将标准化为0到11之间。天数字段及以下将根据需要进行标准化,但这不会溢出到月份字段中 。 因此,1年15个月的期限将正常化为2年3个月。 但是,1个月40天的期限将保持为1个月40天。
(强调我的)
如果需要将其标准化为年和月,则需要在这些字段中构造具有值的Period
。
或者,您可以使用Duration
:
Duration
以毫秒为单位 使用Duration#toPeriodFrom(ReadableInstant)
创建一个从给定时刻开始的Period
(例如new 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
注意第二线已经常态化,但最多只能到几周。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.