Java语言环境和日期格式

时间:2013-11-26 18:19:27

标签: java locale

我只是不明白。有一个网站仅支持英语和德语。并且用户可以选择指定其国家/地区,以便日期,数字和其他特定于语言环境的数据以适当的格式显示。

Locale构建为Locale locale = new Locale(lang, country)。日期格式如下:

DateFormat df = DateFormat.getDateInstance(DateFormat.SHORT, locale);
System.out.println("Date " + df.format(calendar.getTime()));

今天是26 Nov 2013,以下是人们根据自己的国家和所选语言看到的内容:

  1. 11/26/13看到一位来自美国的人正在查看英文页面,区域设置en_US,确定。
  2. 26/11/13看到一位来自英国的人正在查看英文页面,区域设置en_GB,确定。
  3. 11/26/13看到来自法国的人查看英文页面,区域设置en_FR错误
  4. 后者应该看26/11/13(法国人在这里同意我),因为日期格式是特定国家的,不是吗?我在这里缺少什么?

    更新 问题很简单:为什么Locale(“en”,“FR”)产生错误的日​​期格式?

    更新2 我很感激,如果有人能够解释(作为一个答案),为什么Java在日期格式方面没有考虑到这个国家,(在我的POV中)纯粹是针对特定国家的。

3 个答案:

答案 0 :(得分:4)

英语在法国不是官方语言,因此在法国的任何JVM中都没有针对英语的特定设置。结果,您的语言环境将更改为英语(en,默认实现为en_US)。 Here你可以找到完整的解释。

Here您可以找到JDK 7和JRE 7中支持的所有语言环境,并且没有en_FR个语言环境。

  

更新2 如果有人可以解释(作为答案)为什么Java在日期格式方面没有考虑到国家,我会很感激,(在我的POV中)纯粹是针对特定国家的。

日期格式可能是特定国家/地区,但您创建的是预定义的Locale对象(不是动态创建的)。如果JVM没有实现区域设置en_FR,则它不能返回Locale,这是partialy-English-partialy-French的混合。它只返回一些指定的对象 - 最接近的对象是en。这就是它的实施方式。如果它返回fr,那么用户可能会觉得不舒服,因为他想以某种English方言显示页面。

答案 1 :(得分:2)

用于查找特定于语言环境的对象的LocaleServiceProviderPool最终使用java.util.Locale#equals来确定它是否匹配。它没有区分“只关心语言”或“只关心国家”的功能。法国没有为英语预先定义,所以它恢复为默认。

答案 2 :(得分:-3)

我认为法国的正确语言环境是fr_FR