Как отформатировать английскую дату на японском языке с помощью ERA - PullRequest
3 голосов
/ 29 апреля 2019

Мне нужна новая японская дата ERA как «R010501», тогда как я получаю «R151».

Я использую пакет com.ibm.icu.text.DateFormat, чтобы получить формат даты


Date dtEngDate = new SimpleDateFormat("yyyy-MM-dd").parse("2019-05-01");

com.ibm.icu.util.Calendar japaneseCalendar = new com.ibm.icu.util.JapaneseCalendar();

        com.ibm.icu.text.DateFormat japaneseDateFormat = japaneseCalendar.getDateTimeFormat(
                 com.ibm.icu.text.DateFormat.SHORT, -1, Locale.JAPAN);      

        String today = japaneseDateFormat.format(dtEngDate);
System.out.println("today is:" +today.replaceAll("/", ""));

Вывод: сегодня -> R151.Ожидаемый результат: сегодня -> R010501

Ответы [ 2 ]

1 голос
/ 02 мая 2019

java.time.chrono.JapaneseDate

Вам не нужна внешняя зависимость для японского календаря.Он встроен в класс JapaneseDate.

Осторожно: Только самые последние версии Java знают о новой Reiwa эра .

    DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("GGGGGyyMMdd", Locale.JAPANESE);
    LocalDate isoDate = LocalDate.parse("2019-05-01");
    JapaneseDate japaneseDate = JapaneseDate.from(isoDate);
    System.out.println(japaneseDate.format(dateFormatter));

Выводиз этого фрагмента на Java 11.0.3 есть:

R010501

Пять шаблонных букв G дают узкую форму эпохи, всего одну букву (здесь R для Рейвы).

На Java 9.0.4 я получил H310501.Таким образом, кажется, что он будет работать правильно, если вы сможете обновить Java.Мено Хохшильд сообщает в комментарии, что он получил правильный результат на Java 8u212, поэтому вам может не потребоваться обновление до новой основной версии, если только у вас есть новейшее незначительное обновление в основной версии.Я не знаю, есть ли способ обновить только данные календаря в более старой версии Java, это может быть еще одна вещь для расследования.

Кстати, не используйте SimpleDateFormat и Date.Эти классы плохо разработаны (первые особенно печально известны) и давно устарели.Используйте java.time, современный Java API даты и времени.С ним гораздо приятнее работать.

Ссылка: Учебное пособие по Oracle: Дата и время , объясняющее использование if java.time.

1 голос
/ 29 апреля 2019

Я не знаю, что именно вы сделали, кроме меня, но я только что скачал библиотеку com.ibm.icu из http://www.java2s.com/Code/Jar/c/Downloadcomibmicu442jar.htm и в основном скопировал ваш код.

import com.ibm.icu.text.DateFormat;
import com.ibm.icu.util.Calendar;
import com.ibm.icu.util.JapaneseCalendar;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;

public class Main {

    public static void main(String[] args) throws ParseException {
        Date dtEngDate = new SimpleDateFormat("yyyy-MM-dd").parse("2019-05-01");
        Calendar japaneseCalendar = new JapaneseCalendar();
        DateFormat japaneseDateFormat = japaneseCalendar.getDateTimeFormat(DateFormat.SHORT, -1, Locale.JAPAN);
        String today = japaneseDateFormat.format(dtEngDate);
        System.out.println("today is: " + today.replaceAll("/", ""));
    }

}

Я получаюtoday is: 平成310501 в качестве вывода на консоль, и я думаю, это то, что вы ищете.Поэтому я думаю, что с вашим com.ibm.icu-4.4.2.jar.

что-то не так. Возможно, стоит попробовать повторить загрузку последней версии по ссылке, которую я использовал, и добавить ее в зависимости от модулей / проектов.

...