android中给定语言环境的自定义日期格式

时间:2012-02-11 11:46:28

标签: java android date-format

我正在尝试格式化给定区域设置new Locale("mk", "MK")的日期。区域设置有效,它会正确返回国家/地区名称和语言。我想使用自定义字符串,在我的情况下是“E,kk:mm”或“EEEE,kk:mm”。我希望输出为“сабота,12:00”,但我得到的是“7,12:00”。

这是我使用它的方式,我尝试了很多方法,但它们似乎都表现得一样。

SimpleDateFormat sdf = new SimpleDateFormat("EEEE, kk:mm", new Locale("mk", "MK));
sdf.format(new Date());
// output: 7, 12:30

我试过的另一种方法

Calendar calendar = Calendar.getInstance(new Locale("mk", "MK"));
calendar.setTimeInMillis(new Date().getTime());
DateFormat.format("EEEE, kk:mm", calendar);
// output: Saturday, 12:30

我也尝试使用java.text.DateFormat而不是android类,但没有改变。

手机区域设置设置为英语,但这是本地化应用,我想以固定的区域设置格式显示日期。

关于这个问题,我已经研究了许多问题,但是我无法找到答案。我对预定义格式不感兴趣,我想使用自己的格式,我希望为输入区域设置格式化日期/月份名称。

3 个答案:

答案 0 :(得分:3)

我认为问题是马其顿不是Android JVM上受支持的语言环境。如果您将代码作为普通Java控制台应用程序运行,那很好。 Locale.getAvailableLocales()方法在普通Java中返回152个成员,在Android模拟器中只返回88个成员。如果您有代码段:

Locale[] locales = Locale.getAvailableLocales();
   String cCode;
   for (Locale loc :locales){
       cCode = loc.getCountry();
       if (cCode.equalsIgnoreCase("MK"))
            Toast.makeText(this, cCode, Toast.LENGTH_SHORT).show();
        // Or System.out.println() in a Java app    
}

然后吐司不显示“MK”,尽管它将在Java应用程序中打印

答案 1 :(得分:2)

来自SimpleDateFormat的文档:

**Text**: For formatting, if the number of pattern letters is 4 or more, 
the full form is used; otherwise a short or abbreviated form is used if 
available. For parsing, both forms are accepted, independent of the 
number of pattern letters.

所以这应该解决它:

SimpleDateFormat sdf = new SimpleDateFormat("EEEE, kk:mm", new Locale("mk", "MK"));

答案 2 :(得分:2)

NickT更快:-),所以只需添加他的答案:如果你想在Android上看到你的语言环境支持,请运行:

for (Locale l:Locale.getAvailableLocales()) {
    Log.d(l.getDisplayCountry(),l.toString()); 
}

你会看到马其顿不在名单上。