Calendar#getFirstDayOfWeek()返回错误的值

时间:2019-02-14 13:49:44

标签: java calendar locale dayofweek

我可能忽略了一些令人难以置信的显而易见的事情,但是为什么这样做:

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

结果

1  (Sunday)

代替

2 (Monday)

在有人宣称“一周中的第一天是所有德语国家的星期天”(again)之前,它是not” [D]是星期几,从1到7,从星期一开始,到星期日结束。”

实际上,Locale.GERMANY产生正确的“星期一”。

为什么在德国语言环境中,一周的第一天是星期日?

2 个答案:

答案 0 :(得分:3)

您自己回答了这一点,在您的声明中,您使用的是德语而不是国家/地区的语言环境,请将其更改为

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

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

答案 1 :(得分:3)

特定语言的所有默认语言环境,例如Locale.GERMANLocale.FRENCHLocale.ENGLISH将语言环境的未指定部分默认为美国。实际上,这些常数代表居住在美国的德语,法语或英语的人。

这个问题可能没有好的答案,因为仅了解语言还不足以算出一周的第一天。也许是因为Java是由一家美国公司针对美国市场开发的,所以默认语言环境值将美国作为一个国家/地区。

如果您需要德语区域设置,请使用Locale.GERMANY,如其他答案所指出。