Joda-Time返回错误的日期

时间:2014-04-12 21:55:08

标签: android datetime jodatime

我正在使用Joda-time

我想将Gregorian转换为Hijri日期,但它从gregorian返回错误的日期到hijri。

我这样做

TimeZone timeZone = TimeZone.getTimeZone("UTC+05:00"); // Pakistan Time Zone
    DateTimeZone datetimeZone = DateTimeZone.forTimeZone(timeZone);

    Chronology iso = ISOChronology.getInstance(datetimeZone);
    Chronology hijri = IslamicChronology.getInstance(datetimeZone);
    LocalDate todayGeorgian = new LocalDate(2014,04,13), iso); //Today's Date 
    LocalDate todayHijri = new LocalDate(todayGeorgian.toDateTimeAtStartOfDay()), hijri);

        todayHijri.toString(); // This must return **1435-06-13** but returns 1435-06-12

1 个答案:

答案 0 :(得分:1)

当您执行LocalDate#toDateTimeAtStartOfDay()方法的多余调用时,会出现问题 LocalDate对象与时区无关,但当您将其转换为DateTime(按#toDateTimeAtStartOfDay()方法)时,它将变为与区域相关的。
之后,您再次将DateTime转换为LocalDate。 此转换会导致此问题 请不要在这里使用LocalDate#toDateTimeAtStartOfDay()

  Chronology iso = ISOChronology.getInstance(datetimeZone);
  Chronology hijri = IslamicChronology.getInstance(datetimeZone);
  LocalDate todayGeorgian = new LocalDate(2014, 04, 13, iso); //Today's Date 
  LocalDate todayHijri = new LocalDate(todayGeorgian, hijri);  

修改
"UTC+05:00"也不是TimeZone的有效区域。使用:

DateTimeZone datetimeZone = DateTimeZone.forID("Etc/GMT+5");