繁体   English   中英

Joda时间,期间从millis

[英]Joda time, Period from millis

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

也就是说,使用以下代码:

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

没有相应填写所有相关领域。 只有几周和几分钟(输入13259656155391325965615539

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

您可以使用Period#normalizedStandard();对其进行Period#normalizedStandard();

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

Javadoc触及了这一点,但没有详细说明:

如果期间包含年份或月份,则月份将标准化为0到11之间。天数字段及以下将根据需要进行标准化,但这不会溢出到月份字段中 因此,1年15个月的期限将正常化为2年3个月。 但是,1个月40天的期限将保持为1个月40天。

(强调我的)

如果需要将其标准化为年和月,则需要在这些字段中构造具有值的Period

或者,您可以使用Duration

  1. 构造一个Duration以毫秒为单位
  2. 使用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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM