4

我在用我的语言 - 捷克语获得月份名称时遇到问题。

我想将月份名称作为名词,但我总是得到屈折的标题。我尝试了很多方法来获取名称,但所有方法都返回月份名称的变形标题

例如,我想在捷克语“Říjen”中获得十月的名字,但我总是得到“října”。

    Calendar cal=Calendar.getInstance();
    SimpleDateFormat month_date = new SimpleDateFormat("MMMMMMMMM");
    String month_name = month_date.format(cal.getTime());
    DateFormat formatData = new SimpleDateFormat("d.MMMM yyyy H:mm");
    System.out.println(month_name);
    System.out.println(String.format(Locale.getDefault(),"%tB", cal));
    System.out.println(formatData.format(cal.getTime()));

所有对我来说都是错误的格式。有没有办法得到正确的月份名称?谢谢

4

4 回答 4

5

您可能已经解决了这个问题,但这是解决方案。我做了一些研究,原因是java.text.DateFormatSymbolsJava 8 的变化(参见兼容性指南)。

格式化和独立表单之间存在差异。格式化形式:ledna、února、března 等;独立形式:leden、únor、březen 等。

同样根据语言规则,单独的月份名称以较低的字符开头,除非它开始句子。

此代码将为您提供所需的结果。

public static void main(String[] args) {
  Calendar cal = Calendar.getInstance();
  Locale loc = new Locale("cs", "CZ"); 
  System.out.println(cal.getDisplayName(Calendar.MONTH, Calendar.LONG_STANDALONE, loc));
}
于 2014-11-19T14:14:45.930 回答
3

使用此示例代码

public static void main(String[] args) {
    Calendar cal= Calendar.getInstance();
    Locale loc = new Locale("cs", "CZ"); 
    System.out.println(String.format(loc,"%tB", cal));
}

我收到输出

伊仁

这看起来像你想要的(我明确定义了你的Locale)。

于 2013-10-19T12:54:23.863 回答
2

最后,我找到了这个问题的最佳解决方案。问题是“MMMM”格式用于月份的“格式化名称”(fe“ledna”)。如果您需要月份的“独立名称”(fe“leden”),则需要使用“LLLL”。完整的日期格式文档可以在这里找到:

https://docs.oracle.com/javase/8/docs/api/java/text/SimpleDateFormat.html

这是一个简单的例子:

DateFormat.format("LLLL yyyy", date).toString().capitalize() // returns: Leden2016 年

DateFormat.format("MMMM yyyy", date).toString() // returns ledna 2016

该解决方案适用于所有 API。

于 2017-05-21T12:58:23.303 回答
1
于 2017-05-21T18:40:27.687 回答