使用DateFormat
作为模式时,有没有办法让DateFormat.SHORT
格式化一整年的日期(例如12/12/2010)?我必须在en_US和da_DK中格式化日期。
我知道我可以使用DateFormat.MEDIUM
,但必须使用数字和分隔符格式化日期,而en_US的DateFormat.MEDIUM
会产生类似“2010年12月12日”的内容。
答案 0 :(得分:5)
您可以使用取代旧日期时间类的java.time类。不是DateFormat
,而是使用从DateTimeFormatter
派生的DateTimeFormatterBuilder
。
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);
答案 1 :(得分: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(..);
答案 2 :(得分:0)
DateFormat df = DateFormat.getDateInstance(DateFormat.SHORT, locale);
if (df instanceof SimpleDateFormat) {
SimpleDateFormat sdf = (SimpleDateFormat) df;
// To show Locale specific short date expression with full year
String pattern = sdf.toPattern().replaceAll("y+", "yyyy");
sdf.applyPattern(pattern);
return sdf.format(cal.getTime());
}