Calendar#getFirstDayOfWeek() returns 错误值

Calendar#getFirstDayOfWeek() returns wrong value

我可能忽略了一些非常明显的事情,但为什么会这样:

final Calendar calendar = Calendar.getInstance(Locale.GERMAN);
System.out.println(calendar.getFirstDayOfWeek());

结果

1  (Sunday)

而不是

2 (Monday)

?

之前有人声称 "the first day of the week is Sunday for all German speaking people" (again), it's not: [D] 是工作日编号,从 1 到 7,从星期一开始到星期日结束。"

事实上,Locale.GERMANY 结果是正确的 "Monday"。

为什么在德语地区一周的第一天是星期日?

你自己回答了这个问题,在你的声明中你使用了德语的语言环境而不是国家,将其更改为

 final Calendar calendar = Calendar.getInstance(Locale.GERMANY);

(注意,由于您没有更改国家/地区,因此使用默认国家/地区)

特定语言的所有默认语言环境,例如Locale.GERMANLocale.FRENCHLocale.ENGLISH 默认未指定区域设置为美国。实际上,这些常量代表居住在美国的说德语、法语或英语的人。

这个问题可能没有好的答案,因为仅了解语言不足以计算出一周的第一天。可能是因为 Java 是由一家美国公司针对美国市场开发的,默认区域设置值使用美国作为国家/地区。

如果您需要德语语言环境,请使用 Locale.GERMANY,正如其他答案所指出的那样。