Java DateFormat.SHORT与全年

时间:2010-08-31 11:54:37

标签: java date

使用DateFormat作为模式时,有没有办法让DateFormat.SHORT格式化一整年的日期(例如12/12/2010)?我必须在en_US和da_DK中格式化日期。

我知道我可以使用DateFormat.MEDIUM,但必须使用数字和分隔符格式化日期,而en_US的DateFormat.MEDIUM会产生类似“2010年12月12日”的内容。

3 个答案:

答案 0 :(得分:5)

java.time

您可以使用取代旧日期时间类的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)

http://www.java2s.com/Tutorials/Java/Data_Type_How_to/Legacy_Date/Display_the_year_in_full_four_digits_when_using_localization.htm

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());
    }