我需要根据它的号码得到月份名称Locales.
要做到这一点,我创建一个DateTime(或YearMonth无关紧要)对象并获取其monthOfYear属性:
YearMonth md = new YearMonth(1992, month);
System.out.println(md.monthOfYear().getAsText(new Locale("ru")));
Run Code Online (Sandbox Code Playgroud)
事情是适用于英语,因为Nominative和Genitive名称是相同的,但对于其他语言,它只返回Genitive,这不是我需要的.
如何获得有名的月份名称?
我认为你把主格与主格混淆了.当我运行以下代码时:
import org.joda.time.YearMonth;
import java.util.Locale;
public class X {
public static void main(String[] s){
for (int i = 1;i<13; i++) {
YearMonth md = new YearMonth(1992, i);
System.out.println(md.monthOfYear().getAsText(new Locale("ru")));
}
}
}
Run Code Online (Sandbox Code Playgroud)
我得到以下结果:
??????
???????
????
??????
???
????
????
??????
????????
???????
??????
???????
Run Code Online (Sandbox Code Playgroud)
这是为了我的俄罗斯知识:)主格.你可能需要获得属性,但我怀疑Joda支持它.你可以自己实现它,请看这个问题:使用Joda-Time DateTimeFormatter的genitive(波兰语语言环境)中的月份名称
Java 7 和 Java 8 中月份名称的本地化方式发生了重大(向后不兼容!)变化。
\n\n这与 Java 8 引入的新java.time API(教程)有关。该 API(相当合理)区分了月份名称的两种不同形式,如enum所定义:java.time.format.TextStyle
日期格式化程序的默认变体是“标准”,这似乎也很合理,因为格式化程序通常用于生成完整的日期。不幸的是,这导致 Java 7(用于生成独立名称)和 Java 8(生成“标准”名称)之间的行为发生变化(至少对于某些语言而言)。
\n\n可以通过使用上述TextStyle枚举来明确要求独立/主格形式。不幸的是,这使得您的代码依赖于 Java 8 或更高版本。
快速演示:
\n\nimport java.time.Month;\nimport java.time.format.TextStyle;\nimport java.util.Locale;\n\nfor (TextStyle ts : TextStyle.values()) {\n System.out.print(ts + ": ");\n System.out.print(Month.OCTOBER.getDisplayName(ts, Locale.ENGLISH ) + " / "); // English\n System.out.print(Month.OCTOBER.getDisplayName(ts, Locale.forLanguageTag("cs")) + " / "); // Czech\n System.out.print(Month.OCTOBER.getDisplayName(ts, Locale.forLanguageTag("ru")) + " / "); // Russian\n System.out.println(Month.OCTOBER.getDisplayName(ts, Locale.forLanguageTag("pl"))); // Polish\n}\nRun Code Online (Sandbox Code Playgroud)\n\n哪个打印:
\n\nimport java.time.Month;\nimport java.time.format.TextStyle;\nimport java.util.Locale;\n\nfor (TextStyle ts : TextStyle.values()) {\n System.out.print(ts + ": ");\n System.out.print(Month.OCTOBER.getDisplayName(ts, Locale.ENGLISH ) + " / "); // English\n System.out.print(Month.OCTOBER.getDisplayName(ts, Locale.forLanguageTag("cs")) + " / "); // Czech\n System.out.print(Month.OCTOBER.getDisplayName(ts, Locale.forLanguageTag("ru")) + " / "); // Russian\n System.out.println(Month.OCTOBER.getDisplayName(ts, Locale.forLanguageTag("pl"))); // Polish\n}\nRun Code Online (Sandbox Code Playgroud)\n\n我不知道有什么简单的方法来获得可以在 Java 7 和 Java 8 下工作的独立形式。至少在纯 Java 中不行——当然,有一些复杂且更脆弱的方法,比如尝试检测 Java 版本或使用一些第三方库。
\n| 归档时间: |
|
| 查看次数: |
4183 次 |
| 最近记录: |