语言环境依赖如何是SimpleDateFormat?

Jör*_*ann 7 java datetime

我经常使用类似的模式创建SimpleDateFormat,HH:mm:ss或者yyyy-MM-dd以区域设置独立的方式输出日期.由于还有一个构造函数采用了额外的语言环境参数,我想知道是否存在这样的格式可能依赖于语言环境的情况,或者我是否应该始终指定Locale.ENGLISH或Locale.GERMANY.让我们假设时区是明确设置的.

Jör*_*ann 15

刚刚getAvailableLocales在Locale上找到了静态方法,结果表明日历的所有字段都可以依赖于语言环境:

public static void main(String[] args) {
    String pattern = "yyyy-MM-dd HH:mm:ss";
    Date date = new Date();
    String defaultFmt = new SimpleDateFormat(pattern).format(date);

    for (Locale locale : Locale.getAvailableLocales()) {
        String localeFmt = new SimpleDateFormat(pattern, locale).format(date);
        if (!localeFmt.equals(defaultFmt)) {
            System.out.println(locale + " " + localeFmt);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

在我的系统上(在德国运行英文版的ubuntu)这会输出以下列表,让我们希望unicode字符完整无缺:

ja_JP_JP 23-03-03 16:53:09
hi_IN ????-??-?? ??:??:??
th_TH 2554-03-03 16:53:09
th_TH_TH ????-??-?? ??:??:??
Run Code Online (Sandbox Code Playgroud)

所以日本泰国使用不同的时代,但是否则基于格里高利历,这解释了为什么月和日是相同的.

其他语言环境也使用不同的脚本来编写数字,例如印度的印地语和泰国的泰语变体.

要回答这个问题,当需要区域设置独立的String时,应始终将语言环境指定为已知值.

编辑: Java 1.6添加了一个常量Locale.ROOT来指定语言/国家/地区中性区域设置.这将优先指定针对计算机的输出的英语区域设置.

根区域设置是其语言,国家/地区和变体为空("")字符串的区域设置.这被视为所有语言环境的基本语言环境,并用作区域设置敏感操作的语言/国家/地区中性区域设置.