在Unicode協會的網站,你會在中國CLDR repository找到例如條目喜歡如下(日曆類型=公曆):無論是在JodaTime或JDK的日期格式類
<dateFormats>
<dateFormatLength type="full">
<dateFormat>
<pattern>y年M月d日EEEE</pattern>
</dateFormat>
</dateFormatLength>
<dateFormatLength type="long">
<dateFormat>
<pattern>y年M月d日</pattern>
</dateFormat>
</dateFormatLength>
<dateFormatLength type="medium">
<dateFormat>
<pattern>y年M月d日</pattern>
</dateFormat>
</dateFormatLength>
<dateFormatLength type="short">
<dateFormat>
<pattern>yy/M/d</pattern>
</dateFormat>
</dateFormatLength>
</dateFormats>
內部每一個本地化的日期格式被翻譯成這樣的模式 - 包括像「日」這樣的文字。 CLDR沒有定義月,日,僅格式,但是這僅僅是一個普通年 - 月 - 日 - 格式的一部分,所以如果你作爲替代使用
DateTimeFormatter dateFormatter = DateTimeFormat.longDate().withLocale(Locale.CHINESE);
LocalDateTime localStartTime = new LocalDateTime(2013,4,6,23,54,35);
String startTimeStr = dateFormatter.print(localStartTime);
System.out.println(startTimeStr); // output: 2013年4月6日
驗證碼:
DateTimeFormatter dateFormatter = DateTimeFormat.forPattern("M月d日");
LocalDateTime localStartTime = new LocalDateTime(2013,4,6,23,54,35);
String startTimeStr = dateFormatter.print(localStartTime);
System.out.println(startTimeStr); // output: 4月6日
然後你得到你想要的。雖然你寫:
我不想硬代碼幾乎是相同的程序,在內部圖書館完成的模式爲「MMMd日」
。所以模式本身通過選擇適當的文字來進行本地化。沒有辦法從CLDR中提取沒有年份的本地化日期模式。如果你想這樣做,那麼你必須管理你自己的一套本地化的月日模式,適用於不同的地區,可能在地圖<區域設置,字符串>。
更新從2016年12月6日:
沒有一個通用的任何語言環境的月,日模式的情況並沒有改變對喬達時間。不幸的是,Joda-Time的官方繼任者JSR-310(java.time
-package)也不能很好地管理它,請參閱JDK-issue 8168532。這足以讓我爲自己的時間庫Time4J找到解決方案。對CLDR數據的仔細分析表明,其他日期格式可用於多種語言,但在不同的部分和accessible via a group of fields。密鑰「Md」,「MMMd」和「MMMMd」與您的用例相關。例如在Time4J(其中應該有希望通過JSR-310的支持,同樣,在以後的版本):
PlainTimestamp tsp = Iso8601Format.EXTENDED_DATE_TIME.parse("2013-04-06T23:54:35.000");
AnnualDate ad = AnnualDate.of(tsp.getMonth(), tsp.getDayOfMonth());
ChronoFormatter<AnnualDate> chinese =
ChronoFormatter.ofStyle(DisplayMode.LONG, Locale.CHINESE, AnnualDate.chronology());
ChronoFormatter<AnnualDate> english =
ChronoFormatter.ofStyle(DisplayMode.LONG, Locale.ENGLISH, AnnualDate.chronology());
System.out.println(chinese.format(ad)); // 4月6日
System.out.println(english.format(ad)); // Apr 6
這也是值得大家注意的是,地方不能建設格式化後的一個合理的方式,因爲改變局部圖案結構將在施工期間凍結,並且不再適用於以後的場所變化。然而,這將在未來的版本中得到改進。
它說喬達時間。 –