2010-08-31 60 views

回答

3

如果這兩種格式都相同,則簡單地使用:

DateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy"); 

如果它們不同:

private static Map<Locale, String> formats = new HashMap<Locale, String>(); 

static { 
    formats.put(new Locale("en_US"), "dd/MM/yyyy"); 
    formats.put(new Locale("da_DK"), "dd.MM.yyyy"); 
} 

然後而是採用DateFormat.getDateInstance(..)使用

new SimpleDateFormat(formats.get(locale)).format(..); 
+0

他們在分離器不同,月份和日期部分轉換。但我喜歡這個解決方案! :) – ManiSto 2010-08-31 12:22:10

+1

是否有更廣義的解決方案,尤其是在您希望能夠支持* all *語言環境的情況下? – CloudyMusic 2012-09-07 20:30:09

+0

@cloudymusic你能否明確地解析所有地區的8/9/10?是:2008年9月10日? 2010年9月8日? 2010年8月9日? – 2012-11-06 20:39:43

3

java.time的

您可以使用取代舊日期時間類的java.time類。代替DateFormat,請使用從DateTimeFormatterBuilder派生的DateTimeFormatter

DateTimeFormatterBuilder可以提供可用於DateTimeFormatter的模式。使用String.replace可以在FormatStyle.SHORT日期模式插入yyyy,而不是yy

 String pattern = 
      DateTimeFormatterBuilder 
       .getLocalizedDateTimePattern 
        (FormatStyle.SHORT 
        , null 
        , IsoChronology.INSTANCE 
        , locale 
        ); 
     pattern = pattern.replace("yy", "yyyy"); 
     DateTimeFormatter dtf = 
      DateTimeFormatter.ofPattern(pattern); 
+0

聰明的回答。我看到的唯一問題是,它假定對於每個可能的語言環境,FormatStyle.SHORT風格* always *年份都使用兩位數字。如果有人使用4位數字,這種方法就會中斷。 – 2016-09-19 23:20:31

+0

@BasilBourque使用'pattern.replace(「yyyy」,「yy」)。replace(「yy」,「yyyy」)'將解決您的'4位數問題'。 – irieill 2017-08-08 10:34:23

+1

@irieill還應該替換任何'u'和'y',這是另一年的指定代碼。謝謝! – 2017-08-08 15:57:26