使用DateFormat.SHORT
作爲模式時,是否有任何方法可以使DateFormat
格式成爲全年的日期(例如12/12/2010)?我必須在en_US和da_DK中格式化日期。Java DateFormat.SHORT with full year
我知道我可以使用DateFormat.MEDIUM
,但日期必須使用數字和分隔符格式化,而en_US的DateFormat.MEDIUM
產生類似於'2010年12月12日'的內容。
使用DateFormat.SHORT
作爲模式時,是否有任何方法可以使DateFormat
格式成爲全年的日期(例如12/12/2010)?我必須在en_US和da_DK中格式化日期。Java DateFormat.SHORT with full year
我知道我可以使用DateFormat.MEDIUM
,但日期必須使用數字和分隔符格式化,而en_US的DateFormat.MEDIUM
產生類似於'2010年12月12日'的內容。
如果這兩種格式都相同,則簡單地使用:
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(..);
您可以使用取代舊日期時間類的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);
聰明的回答。我看到的唯一問題是,它假定對於每個可能的語言環境,FormatStyle.SHORT風格* always *年份都使用兩位數字。如果有人使用4位數字,這種方法就會中斷。 – 2016-09-19 23:20:31
@BasilBourque使用'pattern.replace(「yyyy」,「yy」)。replace(「yy」,「yyyy」)'將解決您的'4位數問題'。 – irieill 2017-08-08 10:34:23
@irieill還應該替換任何'u'和'y',這是另一年的指定代碼。謝謝! – 2017-08-08 15:57:26
他們在分離器不同,月份和日期部分轉換。但我喜歡這個解決方案! :) – ManiSto 2010-08-31 12:22:10
是否有更廣義的解決方案,尤其是在您希望能夠支持* all *語言環境的情況下? – CloudyMusic 2012-09-07 20:30:09
@cloudymusic你能否明確地解析所有地區的8/9/10?是:2008年9月10日? 2010年9月8日? 2010年8月9日? – 2012-11-06 20:39:43