Search code examples
javalocaledate-format

Get locale specific date/time format in Java


I have use case in java where we want get the locale specific date. I am using DateFormat.getDateInstance

final DateFormat dateFormat = DateFormat.getDateInstance(DateFormat.MEDIUM,
                Locale.forLanguageTag(locale)));

This translates the dates but ja-JP this translates the date "17 January 2019" to "2019/01/17" but I need something like "2019年1月17日". For all other locales this correctly translates the date.

Please let know if there is other method to get this.


Solution

  • This worked for me:

    public static void main(String[] args) throws IOException {
        final DateFormat dateFormat = DateFormat.getDateInstance(DateFormat.FULL, Locale.JAPAN);
        Date today = new Date();
        System.out.printf("%s%n", dateFormat.format(today));
    }
    

    and MEDIUM acted exactly how you said

    UPD: or using newer ZonedDataTime as Michael Gantman suggested:

    public static void main(String[] args) throws IOException {
        ZonedDateTime zoned = ZonedDateTime.now();
        DateTimeFormatter pattern = DateTimeFormatter.ofLocalizedDate(FormatStyle.FULL).withLocale(Locale.JAPAN);
        System.out.println(zoned.format(pattern));
    }