2

我想将日期从波斯历转换为公历。为此,我使用 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

波斯历中的这个日期(1398/11/16)等于公历中的 2020-02-05 星期三

但它给了我 6 作为输出(虽然它应该给 5)

我的代码有问题导致输出错误吗?

4

1 回答 1

0

在查看了传递的 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);
于 2020-02-05T17:52:49.497 回答