Java DateFormat.SHORT с полным годом - PullRequest
3 голосов
/ 31 августа 2010

Есть ли способ заставить DateFormat форматировать дату с полным годом (например, 12.12.2010), если в качестве шаблона используется DateFormat.SHORT? Я должен отформатировать даты в en_US и da_DK.

Я знаю, что мог бы использовать DateFormat.MEDIUM, но дату нужно форматировать, используя только цифры и разделители, а DateFormat.MEDIUM для en_US выдает что-то вроде '12 декабря 2010 года'.

Ответы [ 3 ]

5 голосов
/ 06 ноября 2015

java.time

Вы можете использовать java.time классы, которые вытесняют старые классы даты и времени. Вместо DateFormat используйте DateTimeFormatter, полученный из DateTimeFormatterBuilder.

DateTimeFormatterBuilder может предоставить шаблон, который можно использовать с DateTimeFormatter. Используя String.replace, вы можете вставить yyyy вместо yy в шаблон * Date FormatStyle.SHORT :

        String pattern =
            DateTimeFormatterBuilder
                .getLocalizedDateTimePattern
                    ( FormatStyle.SHORT
                    , null
                    , IsoChronology.INSTANCE
                    , locale
                    );
        pattern = pattern.replace("yy", "yyyy");
        DateTimeFormatter dtf =
            DateTimeFormatter.ofPattern(pattern);
3 голосов
/ 31 августа 2010

Если оба формата одинаковы, просто используйте:

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 голосов
/ 17 сентября 2018

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());
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...