我試圖實現以本地格式顯示日期,但沒有一年。所以應該是:無Joda時間的本地化日期格式
- 6月12日英國
- 6月12日美國
是否有可能實現與喬達時間?
我們嘗試過「dd MMMM」模式,但它不起作用。 我們已經嘗試過StringFormat.longDate()
和剝離年度信息,但有沒有更優雅的解決方案?
我試圖實現以本地格式顯示日期,但沒有一年。所以應該是:無Joda時間的本地化日期格式
是否有可能實現與喬達時間?
我們嘗試過「dd MMMM」模式,但它不起作用。 我們已經嘗試過StringFormat.longDate()
和剝離年度信息,但有沒有更優雅的解決方案?
下方的蓋子,JodaTime使用JDK的java.text.DateFormat.getDateInstance(int style, Locale aLocale)
- 看到的org.joda.time.format.DateTimeFormat.StyleFormatter#getPattern(Locale locale)
來源將其委託給java.text.DateFormat
如何:
String getPattern(Locale locale) {
DateFormat f = null;
switch (iType) {
case DATE:
f = DateFormat.getDateInstance(iDateStyle, locale);
break;
case TIME:
f = DateFormat.getTimeInstance(iTimeStyle, locale);
break;
case DATETIME:
f = DateFormat.getDateTimeInstance(iDateStyle, iTimeStyle, locale);
break;
}
if (f instanceof SimpleDateFormat == false) {
throw new IllegalArgumentException("No datetime pattern for locale: " + locale);
}
return ((SimpleDateFormat) f).toPattern();
}
所以每個區域設置格式嵌入在JDK,甚至沒有在JodaTime。
使用此代碼,你可以得到的預定義模式和輸出不同的區域:
public static void main(String[] args) {
DateTime dt = DateTime.now();
String usFormat = DateTimeFormat.patternForStyle("L-", Locale.US);
String ukFormat = DateTimeFormat.patternForStyle("L-", Locale.UK);
System.out.println(dt.toString(usFormat));
System.out.println(dt.toString(ukFormat));
}
打印
October 20, 2015
20 October 2015
然而,模式預定義了四種風格不僅:短期,中期,長而豐滿,分別適用於日期和時間部分。請參閱JavaDoc DateTimeFormat#patternForStyle
:
第一個字符是日期樣式,第二個字符是時間樣式。指定一個字符爲'S'爲簡短風格,'M'爲中等,'L'爲長,'F'爲完整。通過指定樣式字符' - '可以省略日期或時間。
所以,如果你想刪除年份,你需要後處理從DateTimeFormat.patternForStyle()
獲得的模式。這可以做到,例如。通過刪除所有的「Y」和「Y」字符,但總的來說,如果你想爲任意區域設置,可能會產生一些混亂的模式。
謝謝你,亞當!這是一個更好的解決方案,因爲我已經從已格式化的字符串中刪除了一年,但是我可以使用模式進行操作,這樣可以更安全,更清潔 –
'String date = LocalDate.now()。toString(「dd MMMM」);' – Tiny
@Tiny所以美國和英國會有所不同? –
我不知道API是否根據給定的語言環境自動更改其格式(它應該直觀,但我選擇對此保持沉默,因爲我自己沒有這樣做)。如果沒有,那麼使用該API的應用程序將負責根據所選區域提供/提供適當的日期格式。 – Tiny