Java 将常量值添加到时间戳以将日期转换为公历

Java 将常量值添加到时间戳以将日期转换为公历,java,calendar,icu4j,Java,Calendar,Icu4j,我需要将波斯语(Shamsi)日期转换为公历日期。我搜索了很多,找到了不同的解决方案。最可靠的答案似乎是ibm图书馆;icu4j。 因此,为了改变日期,我开始使用它,但所提供的示例对我不起作用。当我在日历中设置波斯日期并获得时间戳时,1399/04/16的时间戳将是-18009228344000。但当我使用公历时,2020/07/06的时间戳是:1593977400000。所以,我找到了路!我找到差异并将其添加到波斯时间戳中。现在我可以将任何波斯日期转换为格里高利。但我想知道这个解决方案是否可靠

我需要将波斯语(Shamsi)日期转换为公历日期。我搜索了很多,找到了不同的解决方案。最可靠的答案似乎是ibm图书馆;icu4j。 因此,为了改变日期,我开始使用它,但所提供的示例对我不起作用。当我在日历中设置波斯日期并获得时间戳时,1399/04/16的时间戳将是-18009228344000。但当我使用公历时,2020/07/06的时间戳是:1593977400000。所以,我找到了路!我找到差异并将其添加到波斯时间戳中。现在我可以将任何波斯日期转换为格里高利。但我想知道这个解决方案是否可靠。代码如下:

ULocale locale = new ULocale("@calendar=persian");
Calendar persianCalendar = Calendar.getInstance(locale);
persianCalendar.clear();
persianCalendar.set(1399, 3, 16); 
long persianTime = persianCalendar.getTimeInMillis();
long GeorgeanTime =persianTime + 19603205744000L;
persianCalendar.setTimeInMillis(GeorgeanTime);
Date gregorianDate = persianCalendar.getTime();

输出为
Mon Jul 06 00:00:00 IRDT 2020
,这是波斯日期的正确转换。

这有帮助吗[我试图使用一个可靠的库;我认为icu4j是。但我不能正确使用它。我需要用icu4j找到正确的解决方案。你能帮我解决它吗?@DuncG我想你的回答很有帮助。只是发生了一些奇怪的事情。今天波斯历的时间戳是1593977400000。所以,上面的算法非常有用我疯了吗?!我删除了我的答案,因为我用错了罐子,我会再检查一次。