java - SimpleDateFormat 如何依赖于语言环境?

标签 java datetime

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

最佳答案

刚刚在 Locale 上找到了 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);
        }
    }
}

在我的系统上(在德国运行的是英文版的 ubuntu)这会输出以下列表,希望 unicode 字符能完好无损地通过:

ja_JP_JP 23-03-03 16:53:09
hi_IN २०११-०३-०३ १६:५३:०९
th_TH 2554-03-03 16:53:09
th_TH_TH ๒๕๕๔-๐๓-๐๓ ๑๖:๕๓:๐๙

所以 JapanThailand使用不同的纪元,但在其他方面基于 gregorian calendar ,这解释了为什么月和日相同。

其他语言环境也使用不同的脚本来书写数字,例如 Hindi在印度使用,在泰国使用泰语的变体。

要回答这个问题,当需要与语言环境无关的字符串时,应始终将语言环境指定为已知值。

编辑:Java 1.6 添加了一个常量 Locale.ROOT指定语言/国家中立的语言环境。这比为针对计算机的输出指定英语语言环境更可取。

The root locale is the locale whose language, country, and variant are empty ("") strings. This is regarded as the base locale of all locales, and is used as the language/country neutral locale for the locale sensitive operations.

关于java - SimpleDateFormat 如何依赖于语言环境?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5174696/

相关文章:

java - 如何使用spring boot在ehcache3中存储键和值

java - Zookeeper curator缓存如何等待同步?

java - 带有日期和时间的 JFormattedTextField

date - 使用 ISO 8601 表示法创建自定义 SAS 日期时间格式

mysql - 检测两个时间是否冲突/相交

python库从给定字符串中提取日期格式

datetime - 如何在 PowerShell 中格式化日期时间

java - 如何在java文件中运行scala jar文件?

Java Swing JSlider(垂直)更改thumbRect弄乱了 slider 控件

java - 添加 SOAP 故障而不更改 WSDL 文件?