Java 乔达时间,从毫秒开始的周期

Java 乔达时间,从毫秒开始的周期,java,jodatime,Java,Jodatime,我试图使用“millis”构造函数设置Period对象,并相应地更新所有相关字段(年、月、周、日、小时、分钟、秒) 即,使用以下代码: mPeriod = new Period(millis, PeriodType.standard()); 不会相应地填充所有相关字段。 只有几周和几分钟(对于1325965615539的输入毫秒) 有人能帮我解决这个问题吗?你可以使用 但是,Period无法“填写所有相关字段”,因为它无法对月份或年份中的天数进行假设。它所能做的最好的事情就是将它转换成周、天和

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

即,使用以下代码:

mPeriod = new Period(millis, PeriodType.standard());
不会相应地填充所有相关字段。 只有几周和几分钟(对于
1325965615539
的输入毫秒)


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

你可以使用

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

Javadoc涉及到这一点,但没有太详细:

如果期间包含年或月,则月份将为 标准化为介于0和11之间。“天数”字段和以下字段将被删除 根据需要进行规范化,但是该不会溢出到 月份字段。因此,1年15个月的期限将正常化为2个月 三年三个月。但1个月40天的期限将保留为1个月 40天

(强调矿山)

如果需要将其标准化为年和月,则需要使用这些字段中的值构造
期间

或者,您可以使用
持续时间

  • 用毫秒构造一个
  • 用于创建从给定时间点开始的
    期间(例如,新建
    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
    

    请注意,第二行已经正常化,但最多只有几个星期。

    @DrorWeiss-它可能有影响,但可能不是您所期望的。我更新了我的答案以澄清原因。