我正在使用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
答案 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");