java.time.Period normalize()更改月份字段的符号和值,尽管其绝对值小于12
java.time.Period normalize()更改月份字段的符号和值,尽管其绝对值小于12,java,java-time,period,Java,Java Time,Period,normalize()的Java se 8 API如下: 这使年和月单位正常化,而天单位保持不变。月单位调整为绝对值小于11,年单位调整为补偿。例如,“1年15个月”的期限将标准化为“2年3个月”。正常化后,年和月单位的符号将相同。例如,“1年-25个月”的期限将标准化为“-1年-1个月” publicstaticvoidmain(字符串[]args){ Consumer nlz=d->System.out.println(d.normalized()); nlz.accept(期间为(50,1
normalize()
的Java se 8 API如下:
这使年和月单位正常化,而天单位保持不变。月单位调整为绝对值小于11,年单位调整为补偿。例如,“1年15个月”的期限将标准化为“2年3个月”。正常化后,年和月单位的符号将相同。例如,“1年-25个月”的期限将标准化为“-1年-1个月”
publicstaticvoidmain(字符串[]args){
Consumer nlz=d->System.out.println(d.normalized());
nlz.accept(期间为(50,10,-100));//案例1
nlz.accept(期间(-50,10,-100));//案例2
}
/*
程序输出
--------------
P50Y10M-100D
P-49Y-2M-100D
*/
案例1:月份单位的绝对值为10,保持不变
案例2:月单位的绝对值为10,但它改为-2。我认为您误读了“年和月单位的符号在正常化后将是相同的。”。这并不意味着年和月的符号将保持不变,而是意味着得到的年符号将与得到的月符号相同 所以在第二个例子中,10个月必须调整为负值。这是一个模数12运算,结果为负值,绝对值小于12:10-12=-2
然后调整年份值以保持相同的期间。明白了。是的,第三个测试验证了你的解释。
public static void main(String[] args) {
Consumer<Period> nlz = d -> System.out.println(d.normalized());
nlz.accept(Period.of( 50, 10, -100)); // case 1
nlz.accept(Period.of(-50, 10, -100)); // case 2
}
/*
program output
--------------
P50Y10M-100D
P-49Y-2M-100D
*/