有没有办法使DateFormat
格式的日期与完整的一年(例如,12/12/2010),什么时候使用DateFormat.SHORT
作为模式?我必须在en_US和da_DK中格式化日期。
我知道我可以使用DateFormat.MEDIUM
,但日期必须只使用数字和分隔符进行格式化,而en_US的DateFormat.MEDIUM
生成的结果类似于'Dec 12,2010‘。
发布于 2010-08-31 20:01:43
如果两种格式相同,则只需使用:
DateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
如果它们不同:
private static Map<Locale, String> formats = new HashMap<Locale, String>();
static {
formats.put(new Locale("en_US"), "MM/dd/yyyy");
formats.put(new Locale("da_DK"), "dd.MM.yyyy");
}
然后不使用DateFormat.getDateInstance(..)
,而是使用
new SimpleDateFormat(formats.get(locale)).format(..);
发布于 2015-11-06 19:58:55
java.time
您可以使用java.time类来替代旧的date-time类。使用从DateTimeFormatterBuilder
派生的DateTimeFormatter
而不是DateFormat
。
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);
发布于 2018-09-17 07:59:10
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());
}
https://stackoverflow.com/questions/3608716
复制相似问题