Get locale specific date/time format in Java

混江龙づ霸主 提交于 2021-01-02 08:15:15

问题


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.


回答1:


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



回答2:


The trick is to use java.time.format.FormatStyle.LONG:

jshell> java.time.format.DateTimeFormatter.ofLocalizedDate(java.time.format.FormatStyle.LONG).withLocale(java.util.Locale.JAPAN)
$13 ==> Localized(LONG,)

jshell> java.time.LocalDate.now().format($13)
$14 ==> "2019年1月17日"



回答3:


Just to mention: SimpleDateFormat is an old way to format dates which BTW is not thread safe. Since Java 8 there are new packages called java.time and java.time.format and you should use those to work with dates. For your purposes you should use class ZonedDateTime Do something like this:

ZonedDateTime zdt = ZonedDateTime.now(ZoneId.of("..."));

to find out correct zone id for Japan use

ZoneId.getAvailableZoneIds()

Later on to format your Date correctly use class DateTimeFormatter



来源:https://stackoverflow.com/questions/54230982/get-locale-specific-date-time-format-in-java

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!