Java YearMonth 不会解析,但只能在我的电脑上解析?

Java YearMonth will not parse, but only on my computer?

我一直在做一个需要我以这种方式解析字符串的项目 我已经把一直抛错的小部分分开了,


import java.time.YearMonth;
import java.time.format.DateTimeFormatter;

public class TestingYearMonth {

    public static void main(String[] args) {
        
           YearMonth yearMonth = YearMonth.parse("Feb-17", DateTimeFormatter.ofPattern("MMM-yy"));
            System.out.println(yearMonth.getMonth() + " " + yearMonth.getYear());
        
    }
}

我的老师 运行 完全相同的代码和它 returns 输出没问题。但是当我 运行 它时,我得到以下错误

Exception in thread "main" java.time.format.DateTimeParseException: Text 'Feb-17' could not be parsed at index 0
    at java.base/java.time.format.DateTimeFormatter.parseResolved0(DateTimeFormatter.java:2046)
    at java.base/java.time.format.DateTimeFormatter.parse(DateTimeFormatter.java:1948)
    at java.base/java.time.YearMonth.parse(YearMonth.java:295)
    at com.ethanbradley.assignment6.TestingYearMonth.main(TestingYearMonth.java:10)

我们检查过,我的 jdk 没问题(jdk 11,亚马逊 coretto 版本) 我真的不明白为什么这不起作用,请帮助聪明的互联网人....

指定 Locale

您的 JVM 的默认语言环境可能不是将“Feb”识别为二月的语言环境。

指定一个Locale来确定解析月份名称时使用的人类语言和文化规范。

Locale locale = Locale.US ; 
DateTimeFormatter f = DateTimeFormatter.ofPattern( "MMM-yy" , locale ) ;
YearMonth yearMonth = YearMonth.parse( "Feb-17" , f );

看到这个code run live at IdeOne.com

ISO 8601

使用本地化文本进行数据交换是不明智的。我建议您向您的数据发布者介绍 ISO 8601 将日期时间值作为文本交换的标准格式。

年-月的标准格式是 YYYY-MM。示例:2017-02.

java.time类默认使用 ISO 8601 格式。

YearMonth.parse( "2017-02" )