我有 jdk java 版本“1.8.0_45”,我正在使用 joda time api (joda-time-2.7.jar)
By using Joda time api i am getting a wrong date.
By using Jdk 8 hijri date api i am getting a correct date.
我需要使用 java api 将公历日期转换为回历日期。
我的示例测试类如下:
import org.joda.time.*;
import org.joda.time.chrono.*;
import java.time.*;
import java.time.chrono.HijrahChronology;
import java.util.*;
public class Test {
public static void main(String[] args) throws Exception {
DateTime dtISO = new DateTime();
System.out.println("dtISO = "+dtISO);
DateTime dtIslamic = dtISO.withChronology(IslamicChronology.getInstance(DateTimeZone.UTC ));
System.out.println(dtIslamic.getYear()+"-" +dtIslamic.getMonthOfYear()+ "-"+ dtIslamic.getDayOfMonth());
java.time.chrono.HijrahDate hijradate = java.time.chrono.HijrahDate.now();
System.out.println("hijradate "+hijradate);
}
}
这个类的输出是
C:\>java Test
dtISO = 2015-05-24T09:44:51.704+04:00
1436-8-5
hijradate Hijrah-umalqura AH 1436-08-06
你能告诉我 joda api 是正确的还是错误的?
我的生产服务器有 JDK1.6 我现在无法将它升级到 1.8,所以请让我知道你的建议以获得正确的回历日期......等待你的回复......
最佳答案
您在 JodaTime 和 JDK8 之间看到的差异是因为它们使用不同的回历实现。有多种算法可以计算(近似)回历日期。
Jdk8 的 HijrahChoronology 使用 Umm-AlQura 日历的实现,它与 http://www.ummulqura.org.sa/ 中定义的沙特阿拉伯官方回历日历非常匹配。
JodaTime IslamChronology 有不同的实现,您可以使用其工厂方法进行选择,请参阅 http://joda-time.sourceforge.net/apidocs/org/joda/time/chrono/IslamicChronology.html
所以这真的取决于系统受众。如果您在沙特阿拉伯或任何依赖 UmmAlQura 日历的国家/地区,请坚持使用 JDK8 的实现。
关于java - 使用java api将公历日期转换为回历日期,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30420523/