java - java.time.Period normalize() 更改月份字段的符号和值,尽管其绝对值小于 12
问题描述
用于normalize()
读取的 Java se 8 API:
这将年和月单位标准化,而天数单位保持不变。月单位被调整为绝对值小于 11,年单位被调整以补偿。例如,“1 年 15 个月”的时间段将被标准化为“2 年 3 个月”。归一化后年月单位的符号相同。例如,“1 年零 -25 个月”的时间段将被规范化为“-1 年零 -1 个月”。
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
*/
情况1:月单位的绝对值为10,保持不变。
案例2:月单位的绝对值为10,但改为-2。
解决方案
我认为您误读了“标准化后年份和月份单位的符号将相同。”。这并不意味着年份和月份符号将保持不变,这意味着生成的年份符号将与生成的月份符号相同。
因此,在您的第二个示例中,必须将 10 个月调整为负数。这是一个模 12 运算,其结果为负且绝对值小于 12:10-12=-2。
然后调整年份值以保持相同的时期。
推荐阅读
- reactjs - map() not working as expected because of React.StrictMode
- javascript - Retrieve Username after IIS Authentication
- python - plt 如何将单个视频文件显示为 html?
- javascript - Scrollbar not scrolling properly in Vue?
- arrays - Shuffle a square numpy array, but retain correspondence between row and column indices
- torch - 加载保存的 NER 变压器模型会导致 AttributeError?
- python - Django ModelForm 表单未发布
- r - How should I upgrade R properly to keep older versions running [Windows]?
- java - 如何将 SameSite 和 Secure 属性设置为 JSESSIONID cookie
- download - 是否有从外部来源收集图像文件的快速方法(Chrome 开发人员选项卡)