Java语言环境和日期格式

Java语言环境和日期格式,java,locale,Java,Locale,我就是不明白。有一个网站只支持英语和德语。用户还可以选择指定自己的国家,以便日期、数字和其他特定于语言环境的数据以适当的格式显示 区域设置生成为Locale Locale=new Locale(lang,country)。日期的格式如下: DateFormat df = DateFormat.getDateInstance(DateFormat.SHORT, locale); System.out.println("Date " + df.format(calendar.getTime()));

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

区域设置生成为
Locale Locale=new Locale(lang,country)
。日期的格式如下:

DateFormat df = DateFormat.getDateInstance(DateFormat.SHORT, locale);
System.out.println("Date " + df.format(calendar.getTime()));
今天是2013年11月26日,以下是人们根据自己的国家和选择的语言所看到的情况:

  • 11/26/13
    看到一个来自我们的人在看英文页面,locale
    en_US
    ,ok
  • 26/11/13
    看到一个来自英国的人在看英文页面,locale
    en_GB
    ,ok
  • 11/26/13
    看到一个来自法国的人在看英文页面,地点
    en_FR
    错了
  • 后者应该看到
    26/11/13
    (这里的法国人同意我的观点),因为日期格式是特定于国家的,不是吗?我错过了什么

    更新 问题很简单:为什么区域设置(“en”、“FR”)生成错误的日期格式

    更新2
    如果有人能解释一下(作为一个简单的回答)为什么Java在使用最新格式时没有考虑到国家,我将不胜感激。在我看来,这种格式纯粹是国家特定的。

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

    您可以找到JDK 7和JRE 7中支持的所有语言环境,没有
    en_FR
    one

    更新2如果有人能解释(作为一个简单的回答)为什么Java在使用最新格式时没有考虑到国家,我将不胜感激,因为(在我的观点中)这种格式完全是国家特有的


    日期格式可能是特定于国家/地区的,但您正在创建预定义(非动态创建)的
    Locale
    对象。如果JVM没有实现locale
    en_FR
    ,那么它就不能返回
    locale
    ,这是部分英语部分法语的混合。它只返回一些指定的对象-最近的对象是
    en
    。这只是它的实现方式。如果它返回
    fr
    one,那么用户可能不会感到不舒服,因为他想用某种
    英语
    方言显示页面。

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

    您可以找到JDK 7和JRE 7中支持的所有语言环境,没有
    en_FR
    one

    更新2如果有人能解释(作为一个简单的回答)为什么Java在使用最新格式时没有考虑到国家,我将不胜感激,因为(在我的观点中)这种格式完全是国家特有的


    日期格式可能是特定于国家/地区的,但您正在创建预定义(非动态创建)的
    Locale
    对象。如果JVM没有实现locale
    en_FR
    ,那么它就不能返回
    locale
    ,这是部分英语部分法语的混合。它只返回一些指定的对象-最近的对象是
    en
    。这只是它的实现方式。如果它返回
    fr
    one,那么用户可能不会感到不舒服,因为他想用某种
    English
    方言显示页面。

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

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

    您的问题很不清楚。我已经读了很多遍了,但我仍然不能100%确定你在做什么。您是否阅读了所使用方法的文档?en_FR可能表示用户是居住在法国的美国人。@Izmaki,我当然已经读过了。语言是英语,国家是法国,在这种情况下,您希望使用什么日期格式?我得到的是错误的。@Osw-基于,声音
    en\u FR
    将返回到
    en\u US
    “错误”取决于编写规范的人。在这种情况下,苹果说它是对的。@HotLicks-它实际上是Java;这与苹果无关。你的问题很不清楚。我已经读了很多遍了,但我仍然不能100%确定你在做什么。您是否阅读了所使用方法的文档?en_FR可能表示用户是居住在法国的美国人。@Izmaki,我当然已经读过了。语言是英语,国家是法国,在这种情况下,您希望使用什么日期格式?我得到的是错误的。@Osw-基于,声音
    en\u FR
    将返回到
    en\u US
    “错误”取决于编写规范的人。在这种情况下,苹果说它是对的。@HotLicks-它实际上是Java;这与苹果公司无关。我仍然不明白为什么纯粹的国家特定地区的部分需要回归到英语。@Osw JVM试图使用法国使用的英语方言。如果没有这样的方言(
    Locale
    )-它使用
    en
    Locale(默认情况下)扩展到
    en_-US
    ,但仍然不明白为什么纯国家特定的区域设置部分需要退回到英语