Java 如何解读20世纪的年月日?
如何强制Java 如何解读20世纪的年月日?,java,java-time,Java,Java Time,如何强制YearMonth将两位数的值解释为20世纪 YearMonth.of(16,11)//结果:0016-11 但我想得到:2016-11 当然,我可以将2000添加到以前的任何年份数字,但也许有更正确的方法?YearMonth类用于表示从-9999999(最小年份)到999999999(最大年份)的整个年份范围。因此,两位数的年份(或该范围内的任何数字)是有效的输入,并将表示为“该年” 如果你想有一个更严格的行为,那么你需要创建你自己的类来公开YearMonth的所有方法,然后修改构造函
YearMonth
将两位数的值解释为20世纪
YearMonth.of(16,11)//结果:0016-11
但我想得到:2016-11
当然,我可以将
2000
添加到以前的任何年份数字,但也许有更正确的方法?YearMonth类用于表示从-9999999(最小年份)到999999999(最大年份)的整个年份范围。因此,两位数的年份(或该范围内的任何数字)是有效的输入,并将表示为“该年”
如果你想有一个更严格的行为,那么你需要创建你自己的类来公开YearMonth的所有方法,然后修改构造函数来处理你想要的一位数和两位数年份的特殊情况。据你所知,你关心的是如何映射到当前世纪。那么这个呢:
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);
}
}
如果输入值为YY-MM格式的字符串,则可以使用
DateTimeFormatter
DateTimeFormatter YYMM = DateTimeFormatter.ofPattern("yy-MM");
YearMonth ym = YearMonth.parse("16-11", YYMM);
但是,由于您已经有了一个
int
,因此只需添加2000就没有问题。比YearMonth.of(2000+年,月)更正确代码>?年份是否在int
中?它是两位数还是四位数?请发布更多信息说明为什么直接解决方案不能满足您的要求。如果您希望将其解释为20世纪的一年,请添加1900而不是2000。(或者你是说21世纪?)。不管怎样,加1900或2000有什么不对?无法自动让YearMonth
为您执行该操作。@Tunaki编写时,年份值始终以两位数字的形式提供。@Jesper抱歉,我确实是在21世纪。所以加上2000。
DateTimeFormatter YYMM = DateTimeFormatter.ofPattern("yy-MM");
YearMonth ym = YearMonth.parse("16-11", YYMM);