Calendar#getFirstDayOfWeek() returns wrong value
我可能忽略了一些令人难以置信的显而易见的事情,但是为什么这样做:
结果
而不是
?
在有人声称"一周的第一天是所有德语国家的星期天"(再次)之前,不是:" [D]是工作日的数字,从1到7,从头开始以星期一结束,以星期日结束。"
实际上,Locale.GERMANY产生正确的" Monday "。
为什么在德国语言环境中,一周的第一天是星期天?
- 我建议您不要使用Calendar。该课程的设计很差,而且已经过时了。而是使用Java.time(现代Java日期和时间API)中的WeekFields。
-
代码的结果随Java版本的不同而不同(我可以很容易地在Java 10和11上重现,而不是在8和9上重现)。您可以通过在命令行上设置系统属性java.locale.providers(例如-Djava.locale.providers=HOST,COMPAT,CLDR)来进一步控制它。
特定语言的所有默认语言环境,例如Locale.GERMAN,Locale.FRENCH,Locale.ENGLISH默认将未指定的语言环境部分设置为USA。实际上,这些常数代表居住在美国的德语,法语或英语人士。
这个问题可能没有很好的答案,因为仅了解语言还不足以算出一周的第一天。也许因为Java是由一家美国公司针对美国市场开发的,所以默认语言环境值使用美国作为一个国家。
如果需要德语语言环境,请使用另一个答案指出的Locale.GERMANY。
您自己回答了这个问题,在您的声明中,您使用的是德语而不是国家/地区的语言环境,请将其更改为
(注意,由于您未更改国家/地区,因此使用了默认国家/地区)。
- 好吧,问题不是"我该如何解决",而是"为什么"?因为我担心我们说德语的客户date的日期也会错误。
-
您是说默认语言环境是Locale.GERMANY吗?
-
不完全是。他们的语言环境可能是" de_DE"," de_CH"," de_AT"或" de_LI",也可能只是" de"?我担心即使" de"返回错误的值,即使没有使用德语的国家/地区也将星期日作为一周的第一天,其他德国语言环境也可能会返回错误的值。
-
@SteffiS。我听到你了我环顾四周,但对我来说,仅提供一种语言而不提供国家/地区时,Calendar的作用尚不清楚。如果可以的话,最好尽可能准确地给出语言和国家。或者远离旧的Calendar类,转而使用更现代的java.time框架
-
我怀疑只是de会在任何地方用作默认语言环境。不过,我了解您的担心。