Java 为什么Calendar.getInstance()无法使用默认区域设置?

Java 为什么Calendar.getInstance()无法使用默认区域设置?,java,calendar,jvm,Java,Calendar,Jvm,昨天我在这里收到了一个问题的答案: (基本上,了解了如何根据firstDayOfWeek和minimadaysinfirstweek计算一年中的周) 但现在我有一个后续问题-还有哪些其他设置可能会影响日历使用默认区域设置的能力?因为这里是我观察到的行为(有一个正确的en_US默认区域设置): 运行此命令的输出为: 二, 四, 一, 一, 如果我在Clojure(一种JVM语言,因此行为完全相同)中运行它,看起来更荒谬(将默认设置为getDefault的结果…?!): 上面的示例运行时没有任

昨天我在这里收到了一个问题的答案:

(基本上,了解了如何根据firstDayOfWeekminimadaysinfirstweek计算一年中的周)

但现在我有一个后续问题-还有哪些其他设置可能会影响日历使用默认区域设置的能力?因为这里是我观察到的行为(有一个正确的en_US默认区域设置):

运行此命令的输出为:

  • 二,
  • 四,
  • 一,
  • 一,
如果我在Clojure(一种JVM语言,因此行为完全相同)中运行它,看起来更荒谬(将默认设置为getDefault的结果…?!):

上面的示例运行时没有任何JVM参数——因此,我的问题是,firstDayOfWeek和minimalDaysInWeek的2和4的设置从何而来?也许最重要的是,我如何永久地修复它们


谢谢

FWIW,无法复制您的结果(并且在示例的Java版本末尾缺少一个
)。不能在本地复制(我得到
2/4/2/4
),也不能在上复制(我得到
1/1/1
),或
compileonline.com
,或
jdoodle.com
,…是的,我没想到你能复制这个-我的系统以某种微妙的方式出现了问题。因此,我的问题是,真的——这种环境从何而来;什么会以这种方式影响日历,有效地绕过默认区域设置,这应该是此类设置的来源…是的,非常奇怪。我试过几个不同的盒子:多个Linux版本,多个Windows版本,总是得到
2/4/2/4
1/1/1
;我自己试过几台机器,我的同事也试过。有趣的是,当我用核武器攻击我的整个操作系统时(工作第三天,机器已经被预先使用过了,所以谁知道它会出什么问题),一切都正常了。但是,当我运行完所有负责设置我的env的脚本后,它又重新出现了。因此,现在我想找出这些脚本中的漏洞。这个问题促使我尝试确定Mac OS X中的哪些设置可能会影响alexakarpov讨论的Java日历属性。我把我的结果贴在和上。有趣的结果包括一个大惊喜(一个可能的bug)。
Calendar c = Calendar.getInstance(); // should use the default locale, per docs
System.out.println(c.getFirstDayOfWeek());
System.out.println(c.getMinimalDaysInFirstWeek());
c = Calendar.getInstance(Locale.getDefault()); // provide the default explicitly
System.out.println(c.getFirstDayOfWeek());
System.out.println(c.getMinimalDaysInFirstWeek());
user=> (.getFirstDayOfWeek  (java.util.Calendar/getInstance))
2
user=> (Locale/setDefault (Locale/getDefault))
nil
user=> (.getFirstDayOfWeek  (java.util.Calendar/getInstance))
1