我这里有一个非常简单的程序:
public static void main(String [] args){ LocalDate year = LocalDate.ofYearDay(2022,100); 的System.out.println(一年);
的System.out.println(…
这样的周字段是高度本地化的,因此依赖于底层JVM的本地化资源,这些资源可以从一个版本更改为另一个版本。
我认为JVM10更正确,因为 Locale.GERMAN 并不是指任何国家,因此Java简单地假设美国(以某种方式将这个国家作为世界标准来处理是有问题的,但Java也是如此)。
Locale.GERMAN
的 你应该更好地使用 强> Locale.GERMANY 。这个国家确实使用星期一作为一周的第一天(与美国从星期日开始的情况相反,后者被用作后备 GERMAN 这只是一种语言,而不是一个国家。
Locale.GERMANY
GERMAN
该 当前的CLDR数据 后备国家/地区的列表“001”(=全球)周定义(星期一为星期的第一天,1 =日历年的第一周的最小天数)。令人惊讶的是,这与美国定义(星期日,1)不同。我认为,Oracle刚刚做了自己的事情。就个人而言,我同意@Holger,而是期望ISO-8601作为后备(星期一,4)。
但是,您可以通过设置以下内容来恢复JVM-10计算机上的Java-8行为 系统属性 (未测试):
java.locale.providers=COMPAT,CLDR,SPI
该 Locale 枚举区分对语言有用的实例(如 GERMAN )和对国家有用的实例(如 GERMANY )。如果要设置不同的lang设置并保持本地,请使用第一个 Locale 另一方面,使用后者设置时间和语言设置。
Locale
GERMANY