Я получаю неправильный вывод в библиотеке ICU4J

Я хочу преобразовать дату из персидского календаря в григорианский календарь. Для этого я использую библиотеку ICU4J (версия 65.1). Проблема в том, что эта библиотека выдает неверный вывод для некоторых дат.

Вот мой код:

ULocale locale = new ULocale("fa_IR@calendar=persian");

GregorianCalendar gregoriancal = new GregorianCalendar();

Calendar persiancal = Calendar.getInstance(locale);
//            year month day
persiancal.set(1398, 11, 16);

gregoriancal.setTime(persiancal.getTime());

String day = gregoriancal.get(Calendar.DATE) + "";

System.out.println(day);
----------------------------------------
output: 6

эта дата по персидскому календарю ( 16 ноября 1398 г. ) соответствует 05 февраля 2020 г., среда, февраль по григорианскому календарю.

но он дает мне 6 в качестве вывода (в то время как он должен дать 5)

что-то не так с моим кодом, что приводит к неправильному выводу??


person farhad    schedule 05.02.2020    source источник
comment
Используйте GregorianCalendar с правильным иранским временем. зона. Во время 00:00 такой выходной вполне может случиться.   -  person Joop Eggen    schedule 05.02.2020
comment
@Joop Eggen, не могли бы вы написать код? Спасибо   -  person farhad    schedule 05.02.2020
comment
@omid, мне нужна твоя помощь. пожалуйста, дайте мне свой адрес электронной почты или номер приложения wats   -  person farhad    schedule 09.02.2020
comment
Извините, Фархад, я меняю фирму в конце февраля, а дел относительно много. Но я посмотрю код во второй раз.   -  person Joop Eggen    schedule 10.02.2020
comment
Пробовал нулевые месяцы, как в java.util.Calendar. см. мой ответ. Это подходит, но, пожалуйста, проведите небольшое исследование. У меня нет времени.   -  person Joop Eggen    schedule 10.02.2020


Ответы (1)


После просмотра javadoc, передающего ULocale, следует поместить GregorianCalendar в правильный часовой пояс:

com.ibm.icu.util.GregorianCalendar gregoriancal =
    new com.ibm.icu.util.GregorianCalendar(locale);

Я думаю, что месяц может быть основан на 0, как в java.util.Calendar.

    persiancal.set(1398, 11-1, 16);
person Joop Eggen    schedule 05.02.2020