如何强制YearMonth
将两位数值解释为20世纪?
YearMonth.of(16, 11); //result: 0016-11
但我想得到:2016-11
。
当然我可以在之前的任何年份添加2000
,但也许有更正确的方法?
答案 0 :(得分:3)
YearMonth类旨在表示从-999,999,999(MIN_YEAR)到999,999,999(MAX_YEAR)的全部年份。因此,两位数年份(或实际上该范围内的任何数字)是有效输入,并将表示为“那一年”。
如果您想要更具限制性的行为,那么您需要创建自己的类,公开YearMonth的所有方法,然后修改构造函数以处理您希望的一年和两位数年份的特殊情况
答案 1 :(得分:1)
据您了解,您关心的是以某种方式映射到当前世纪的动态。那怎么样:
pleaseCheckPics(link)
它处理到当前世纪的映射,但也识别绝对年值。
输出是:
public static void main(String[] args) {
System.out.println(mapToCurrentCentury(16, 11));
System.out.println(mapToCurrentCentury(116, 11));
System.out.println(mapToCurrentCentury(1116, 11));
}
private static YearMonth mapToCurrentCentury(int year, int month) {
if(year < 1000) {
YearMonth now = YearMonth.now();
return now.withYear(((now.get(ChronoField.YEAR) / 1000) * 1000) + (year % 1000)).withMonth(month);
}
else {
return YearMonth.of(year, month);
}
}
答案 2 :(得分:0)
如果您将输入值作为字符串格式为YY-MM,则可以使用DateTimeFormatter
DateTimeFormatter YYMM = DateTimeFormatter.ofPattern("yy-MM");
YearMonth ym = YearMonth.parse("16-11", YYMM);
但是,由于你已经拥有int
,因此添加2000就没有错。