将格里高利转换为日期

我想从Gregorian转换为Hijri(伊斯兰)日期,我需要一个java类来进行此转换。 我想以“yyyy / mm / dd”的格式给它一个格里高利日期作为字符串,它以相同的格式给我Hijri日期。 谁能帮我?

首先,将转换部分与格式化/解析部分分开。 您可以稍后轻松处理这些问题 – Stack Overflow上有很多关于此问题的问题。

就个人而言,我会使用Joda Time ,这通常会让生活变得更加简单。 例如:

import org.joda.time.Chronology; import org.joda.time.LocalDate; import org.joda.time.chrono.IslamicChronology; import org.joda.time.chrono.ISOChronology; public class Test { public static void main(String[] args) throws Exception { Chronology iso = ISOChronology.getInstanceUTC(); Chronology hijri = IslamicChronology.getInstanceUTC(); LocalDate todayIso = new LocalDate(2013, 3, 31, iso); LocalDate todayHijri = new LocalDate(todayIso.toDateTimeAtStartOfDay(), hijri); System.out.println(todayHijri); // 1434-05-19 } } 

(感觉应该有一个更简洁的方法来转换日期之间的日期,但我找不到一个。)

现在,Hejrah Date已经足够了Java 8

片段:

 import java.time.*; import java.time.chrono.HijrahChronology; Date date = new Date(); // Gregorian date Calendar cl=Calendar.getInstance(); cl.setTime(date); HijrahDate islamyDate = HijrahChronology.INSTANCE.date(LocalDate.of(cl.get(Calendar.YEAR),cl.get(Calendar.MONTH)+1, cl.get(Calendar.DATE))); //OUTPUT: Hijrah-umalqura AH 1436-02-03 

只需使用谷歌这里复制从给出的链接:

 import java.util.Calendar; /** * Gregorian-Hijri Dates Converter * * * This Code is used to convert Gregorian dates to Hijri Dates * * */ public class DateHigri { static double gmod(double n,double m) { return ((n % m) + m) % m; } static double[] kuwaiticalendar(boolean adjust) { Calendar today = Calendar.getInstance(); int adj=0; if(adjust){ adj=0; }else{ adj=1; } if (adjust) { int adjustmili = 1000 * 60 * 60 * 24 * adj; long todaymili = today.getTimeInMillis() + adjustmili; today.setTimeInMillis(todaymili); } double day = today.get(Calendar.DAY_OF_MONTH); double month = today.get(Calendar.MONTH); double year = today.get(Calendar.YEAR); double m = month + 1; double y = year; if (m < 3) { y -= 1; m += 12; } double a = Math.floor(y / 100.); double b = 2 - a + Math.floor(a / 4.); if (y < 1583) b = 0; if (y == 1582) { if (m > 10) b = -10; if (m == 10) { b = 0; if (day > 4) b = -10; } } double jd = Math.floor(365.25 * (y + 4716)) + Math.floor(30.6001 * (m + 1)) + day + b - 1524; b = 0; if (jd > 2299160) { a = Math.floor((jd - 1867216.25) / 36524.25); b = 1 + a - Math.floor(a / 4.); } double bb = jd + b + 1524; double cc = Math.floor((bb - 122.1) / 365.25); double dd = Math.floor(365.25 * cc); double ee = Math.floor((bb - dd) / 30.6001); day = (bb - dd) - Math.floor(30.6001 * ee); month = ee - 1; if (ee > 13) { cc += 1; month = ee - 13; } year = cc - 4716; double wd = gmod(jd + 1, 7) + 1; double iyear = 10631. / 30.; double epochastro = 1948084; double epochcivil = 1948085; double shift1 = 8.01 / 60.; double z = jd - epochastro; double cyc = Math.floor(z / 10631.); z = z - 10631 * cyc; double j = Math.floor((z - shift1) / iyear); double iy = 30 * cyc + j; z = z - Math.floor(j * iyear + shift1); double im = Math.floor((z + 28.5001) / 29.5); if (im == 13) im = 12; double id = z - Math.floor(29.5001 * im - 29); double[] myRes = new double[8]; myRes[0] = day; // calculated day (CE) myRes[1] = month - 1; // calculated month (CE) myRes[2] = year; // calculated year (CE) myRes[3] = jd - 1; // julian day number myRes[4] = wd - 1; // weekday number myRes[5] = id; // islamic date myRes[6] = im - 1; // islamic month myRes[7] = iy; // islamic year return myRes; } static String writeIslamicDate() { String[] wdNames = {"Ahad", "Ithnin", "Thulatha", "Arbaa", "Khams", "Jumuah", "Sabt"}; String[] iMonthNames = {"Muharram", "Safar", "Rabi'ul Awwal", "Rabi'ul Akhir", "Jumadal Ula", "Jumadal Akhira", "Rajab", "Sha'ban", "Ramadan", "Shawwal", "Dhul Qa'ada", "Dhul Hijja"}; // This Value is used to give the correct day +- 1 day boolean dayTest=true; double[] iDate = kuwaiticalendar(dayTest); String outputIslamicDate = wdNames[(int) iDate[4]] + ", " + iDate[5] + " " + iMonthNames[(int) iDate[6]] + " " + iDate[7] + " AH"; return outputIslamicDate; } } 

尝试实现java.util.Calendar ummalqura-calendar 。

使用此日历,您可以将Umm Al-Qura转换为Gregorian,反之亦然,您也可以使用java.text.SimpleDateFormat格式化日期。

在android平台导入上转换日期的示例方式

 import org.joda.time.Chronology; import org.joda.time.DateTime; import org.joda.time.chrono.ISOChronology; import org.joda.time.chrono.IslamicChronology; import org.joda.time.LocalDate; 

然后

 implements HijriDatePickerDialog.OnDateSetListener 

在onDateSet方法上

 @Override public void onDateSet(HijriDatePickerDialog view, int year, int monthOfYear, int dayOfMonth) { Chronology iso = ISOChronology.getInstanceUTC(); Chronology hijri = IslamicChronology.getInstanceUTC(); DateTime dtHijri = new DateTime(year,monthOfYear,monthOfYear,dayOfMonth,dayOfMonth,hijri); DateTime dtIso = new DateTime(dtHijri, iso); Log.i("converted date" ,String.valueOf(dtIso)); }