Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java.time.Period normalize()更改月份字段的符号和值,尽管其绝对值小于12_Java_Java Time_Period - Fatal编程技术网

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
*/