gpt4 book ai didi

java - Mac OS X 中的哪些设置会影响 Java 中的 `Locale` 和 `Calendar`?

转载 作者:搜寻专家 更新时间:2023-10-31 19:55:02 25 4
gpt4 key购买 nike

这两个问题让我想知道 Mac OS X 中的哪些设置会影响 LocaleCalendar Java 中的默认值和行为:

  • WEEK_OF_YEAR inconsistent on different machines
  • Why would Calendar.getInstance() fail to use the default locale?

  • 这些讨论的关键是 Calendar 中的这两个属性:
  • firstDayOfWeek
  • minimalDaysInFirstWeek

  • 这两个值的默认值都是 1在 Java 7 和 8 中,当在默认美国运行时。什么会导致报告其他值?

    最佳答案

    我已经看到了一些关于影响 java.util.Calendar 的这些属性的特殊行为。

    结论

    事实确定:

  • Java Locale由系统偏好设置中的语言决定。
  • Calendar 的两个属性不受通过 Mac 语言更改的 Java Locale 的影响。相反,它们是通过在系统偏好设置中选择一个区域来确定的。
  • 奇怪的是,也可能是一个错误,在系统偏好设置中手动选择一周的第一天弹出菜单无法影响 Java 中的等效属性。影响 Mac 设置作为选择区域的一部分会影响 Java,但手动选择弹出菜单不会。
  • 通过 Mac 语言设置设置 Java Locale 不会影响 Calendar 的属性,但是将 Locale 传递给 Calendar 的构造函数确实会影响其属性(明显的矛盾)。

  • 细节

    运行此代码作为测试。
    import java.util.Calendar;
    import java.util.Date;
    import java.util.Locale;
    import java.util.TimeZone;

    public class TestCalendar
    {

    public static void main( String[] args )
    {
    Locale locale = Locale.getDefault();
    Calendar c = Calendar.getInstance();
    c.setTime( new Date( new Long( 1293840000000l ) ) ); // First moment of the year 2011 in UTC.
    System.out.println( "Locale: " + locale + " | FirstDayOfWeek: " + c.getFirstDayOfWeek() + " | MinimialDaysInFirstWeek: " + c.getMinimalDaysInFirstWeek() );
    }
    }

    在 Mac OS X (Mavericks) 上托管的 Parallels 9 虚拟机中使用 Mac OS X 10.8.5 (Mountain Lion) 和 Java 8 Update 11,在安装操作系统期间选择美国区域设置,我玩了 System Preferences > Language & Text .

    Screen shot of window after choosing Apple menu > System Preferences > Language & Text in Mac OS X Mountain Lion

    系统偏好设置 > 语言和文本 > 区域 > 一周的第一天

    奇怪的是,变化 First day of week区域选项卡上没有任何影响。 Java 报告 FirstDayOfWeek: 1我是否将该弹出菜单设置为“星期日”或“星期一”。
    Locale: en_US | FirstDayOfWeek: 1 | MinimialDaysInFirstWeek: 1

    重新启动 NetBeans IDE 没有帮助。重新启动 Mac(虚拟机)没有帮助。

    系统偏好设置 > 语言和文本 > 地区

    在区域选项卡上,选中显示所有区域复选框以查看更多区域。选择 French > France .立即运行 IDE。无需重新启动 IDE 或操作系统,甚至无需关闭“系统偏好设置”窗口。
    Locale: en_US | FirstDayOfWeek: 2 | MinimialDaysInFirstWeek: 4

    有趣的两个帐户。
  • 现在我们知道 Region 设置会影响这两个关键 Calendar 设置,但是 Locale 没有改变。值 2因为 FirstDayOfWeek 意味着 Monday ,这对法国(以及世界大部分地区)来说是正确的。
  • 另一个问题很奇怪,可能是一个错误:当设置为较大区域更改的一部分时,一周的第一天弹出窗口似乎会影响 Java,但手动选择该弹出窗口不会影响相关的 Java 属性。

  • 将区域弹出窗口重置回 United States恢复一致且符合预期的 Java 属性:
    Locale: en_US | FirstDayOfWeek: 1 | MinimialDaysInFirstWeek: 1

    系统偏好设置 > 语言和文本 > 语言

    在语言选项卡上,拖动 Français (法语)到列表的顶部,所以它出现在英语之前。

    立即运行 IDE。
    Locale: fr_FR | FirstDayOfWeek: 1 | MinimialDaysInFirstWeek: 1

    再次,有趣。现在我们知道 Java Locale 是由 Mac Language 设置决定的。而且我们知道这对有问题的 Calendar 属性没有影响。

    所以你认为Mac Language 决定Java Locale,Java Locale 不影响Calendar 属性?是的,在阅读上面时,但在阅读下一节时错误,我们看到 Java Locale 以另一种方式设置会影响 Calendar 属性。非常混淆。

    通过 Java 语言环境

    又发现了一个矛盾。让我们将 Mac 恢复为美国默认设置:(1) 语言列表顶部的英语,(2) 区域设置为美国。

    更改我们的代码以将 Locale 传递给 Calendar 的构造函数。
    Calendar c = Calendar.getInstance( Locale.FRANCE );

    这会影响日历属性:
    FirstDayOfWeek: 2 | MinimialDaysInFirstWeek: 4

    所以,令人困惑的矛盾是:
  • 通过 Mac 的语言设置 Java 语言环境不会影响日历的属性。
  • 将 Locale 显式传递给 Calendar 构造函数确实会影响其属性。
  • 关于java - Mac OS X 中的哪些设置会影响 Java 中的 `Locale` 和 `Calendar`?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24844982/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com