2015-10-16 59 views
3

我試圖實現以本地格式顯示日期,但沒有一年。所以應該是:無Joda時間的本地化日期格式

  • 6月12日英國
  • 6月12日美國

是否有可能實現與喬達時間?

我們嘗試過「dd MMMM」模式,但它不起作用。 我們已經嘗試過StringFormat.longDate()和剝離年度信息,但有沒有更優雅的解決方案?

+0

'String date = LocalDate.now()。toString(「dd MMMM」);' – Tiny

+0

@Tiny所以美國和英國會有所不同? –

+0

我不知道API是否根據給定的語言環境自動更改其格式(它應該直觀,但我選擇對此保持沉默,因爲我自己沒有這樣做)。如果沒有,那麼使用該API的應用程序將負責根據所選區域提供/提供適當的日期格式。 – Tiny

回答

1

下方的蓋子,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」字符,但總的來說,如果你想爲任意區域設置,可能會產生一些混亂的模式。

+0

謝謝你,亞當!這是一個更好的解決方案,因爲我已經從已格式化的字符串中刪除了一年,但是我可以使用模式進行操作,這樣可以更安全,更清潔 –