国家/地区语言环境日期格式问题

时间:2011-11-08 12:32:55

标签: java localization date-format

我正在编写一个多语言程序,我已将Locales设置为Country特定的程序(例如de_AT,de_DE,en_US,en_GB)。所以,如果我打电话给DateFormat.getDateInstance(int fomat,Locale l),我总会得到英语!如果我只使用语言Locales(例如En,de,...)

,它就可以工作

我已经审核了Oracle Doc of DateFormat,但他们的示例也出现了错误。

以下是一个示例程序:

import java.text.DateFormat;
import java.util.Locale;
import java.util.Date;

public class DateFormatTest {
  public static void main(String args[]){
    Locale[] locales={new Locale("de_AT"),new Locale("de_DE"), new Locale("de"), new Locale("en_US"), new Locale("en"), new Locale("fr_FR"), new Locale("fr_CA"), new Locale("fr")};
    Date today= new Date();
    for(Locale l: locales){
        System.out.println(l.toString()+"\t"+
              DateFormat.getDateInstance(DateFormat.DEFAULT,l).format(today)+"\t"+
              DateFormat.getDateInstance(DateFormat.FULL,l).format(today));
    }
  }
}

这是输出:

huwa@hubefl-ws:~/tmp$ javac DateFormatTest.java 
huwa@hubefl-ws:~/tmp$ java DateFormatTest 
de_at   Nov 8, 2011 Tuesday, November 8, 2011
de_de   Nov 8, 2011 Tuesday, November 8, 2011
de      08.11.2011  Dienstag, 8. November 2011
en_us   Nov 8, 2011 Tuesday, November 8, 2011
en      Nov 8, 2011 Tuesday, November 8, 2011
fr_fr   Nov 8, 2011 Tuesday, November 8, 2011
fr_ca   Nov 8, 2011 Tuesday, November 8, 2011
fr      8 nov. 2011 mardi 8 novembre 2011

有人有同样的问题吗?有解决方案吗?

3 个答案:

答案 0 :(得分:3)

根据javadocs,构造函数是

Locale(String language)
Locale(String language, String country)
Locale(String language, String country, String variant)

因此,当您创建new Locale("de_AT")时,它会尝试使用不存在的语言“de_AT”,因此它会回退到默认值(英语)。

尝试

Locale[] locales={new Locale("de", "AT"), new Locale("de", "DE"), ...};

答案 1 :(得分:2)

问题在于您构建Locale对象的方式。将国家和语言作为单独的参数传递,例如

Locale[] locales = { new Locale("de", "AT"), new Locale("de", "DE"), 
    new Locale("de"), new Locale("en", "US"), new Locale("en"), 
    new Locale("fr", "FR"), new Locale("fr", "CA"), new Locale("fr")};

答案 2 :(得分:0)

尝试

DateFormat.getDateInstance(DateFormat.FULL,Locale.GERMANY).format(today));