语言环境依赖如何是SimpleDateFormat?

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

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

 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 ๒๕๕๔-๐๓-๐๓ ๑๖:๕๓:๐๙ 

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

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

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

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

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

是的, SimpleDateFormat绝对是对语言环境敏感的。 某些字段(如小时和分钟)与区域设置无关。

SimpleDateFormat还支持本地化的日期和时间模式字符串。 在这些字符串中,上述模式字母可以用其他依赖于语言环境的模式字母替换。 SimpleDateFormat不处理模式字母以外的文本本地化; 这取决于class级的客户。

或者,您可以使用本地化友好的DateFormat#getDateInstance()工厂方法,因为:

public SimpleDateFormat(String pattern, Locale locale)

使用给定模式和给定语言环境的默认日期格式符号构造SimpleDateFormat 。 注意:此构造函数可能不支持所有语言环境。 要获得完整覆盖,请使用DateFormat类中的工厂方法。

这对我有用,也许你应该尝试一下:

String time = new SimpleDateFormat("HH:mm:ss").format(new Date());

控制台输出:

 11:52:45