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);