Получите локальный формат даты / времени в Java - PullRequest
0 голосов
/ 17 января 2019

У меня есть вариант использования в Java, где мы хотим получить конкретную дату локали. Я использую DateFormat.getDateInstance

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

Это переводит даты, но ja-JP это переводит дату "17 января 2019 года" в "2019/01/17", но мне нужно что-то вроде "2019 年 1 月 17 日". Для всех остальных языков это правильно переводит дату.

Пожалуйста, дайте знать, если есть другой способ получить это.

Ответы [ 3 ]

0 голосов
/ 17 января 2019

Хитрость заключается в использовании 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日"
0 голосов
/ 17 января 2019

Просто упомянуть: SimpleDateFormat - это старый способ форматирования дат, который, кстати, не является поточно-ориентированным. Начиная с Java 8 появились новые пакеты с именами java.time и java.time.format, и вы должны использовать их для работы с датами. Для ваших целей вы должны использовать класс ZonedDateTime Сделайте что-то вроде этого:

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

чтобы узнать правильный идентификатор зоны для Японии

ZoneId.getAvailableZoneIds()

Позже для правильного форматирования даты используйте класс DateTimeFormatter

0 голосов
/ 17 января 2019

Это сработало для меня:

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

и MEDIUM действовали именно так, как вы сказали

UPD: или с использованием более новой ZonedDataTime , как предложил Майкл Гантман:

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