我有 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/

10-10 10:04