2012-02-11 74 views
2

我试图格式化日期定区域设置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,而不是机器人类也尝试过,但没有任何变化。

手机语言环境设置为英语,但这是局部的应用程序,我想显示在一个固定的区域设置格式的日期。

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

回答

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应用程序

+0

107在我的设备上,但你是对的,没有马其顿。看到我对其他答案的评论。 – 2012-02-11 15:47:55

+0

好吧,我经过几个小时的搜索后继续这篇文章。我正在寻找相同的答案,但对于意大利语言:不幸的是,它不在我的可用区域设置列表中。没有机会。 – Zappescu 2012-04-22 20:18:44

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")); 
+0

它应该,但它不。输出仍然是'7,12:30'。可以肯定的是,'locale.getCountryName()'正确返回“马其顿(马其顿)”,所以我猜这不是区域设置问题。虽然,自从星期六是“mk”语言环境的第6天起,它应该会返回“6,12:30”。 – 2012-02-11 11:58:03

+0

@TomislavMarkovski:你肯定* * - 请注意,在这个答案给出的代码是*不*一样东西你的问题显示 - 它有'EEEE'而不是'E'。 – 2012-02-11 12:05:23

+0

@JonSkeet,是的,我确定我正在直接在我的设备上尝试调试所有可能的变体。 – 2012-02-11 12:06:12

2

NickT是更快:-)调用println,所以只是增加了他的答案:如果你想看到支持Android平台上的语言环境,运行:

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

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

+0

这是正确的。我发现了这个问题,但我没有更新我的答案。我的手机支持107个语言环境。尽管我可以通过传递“mk”作为国家代码来创建Locale对象,但它确实会返回完整的国家和语言,但不包含数字和日期定义。 “mk”不在支持的语言环境中,这是一个无赖 – 2012-02-11 15:47:00