Я хочу конвертировать из грегорианской в хиджри (исламскую) дату, и мне нужен класс java для этого преобразования. Я хочу дать ему григорианскую дату в формате «yyyy/mm/dd» в качестве строки и дать мне дату хиджра в том же формате. Может кто-нибудь мне помочь?преобразование gregorian в hijri date
ответ
Во-первых, отделить часть преобразования от форматирования/разборе часть. Вы можете справиться с этими вопросами позже - и есть лотов вопросов о переполнении стека об этом.
Лично я бы использовал 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
}
}
+1 Мне нравится ваш путь лучше, короткий код. На том, что я написал, это просто способ, которым это работает – knowbody
+ knowbody Я не знаю, почему, но этот код приносит мне 1434-05-18 не 1434-05-19? как я могу исправить эту проблему? – anony
@anony: Здесь есть две разные возможности: одна заключается в том, что вы ожидаете неправильную эпоху (есть астрономические и гражданские эпохи), а другая - вам нужно использовать исламскую хронологию с другим шаблоном високосного года. Посмотрите на документы для IslamicChronology для деталей. –
просто использовать Google for example here скопирована из ссылки Дано:
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;
}
}
Я бы предпочел использовать существующую библиотеку, чем включать весь этот код в свой собственный проект :) –
Я бы сделал то же самое, здесь вы можете увидеть, как это работает;) – knowbody
это не работает right.it приведите аналогичные даты в течение нескольких дней. напр. Я изменил его вход, чтобы получить строку, и сделал такую же дату для «2014/1/29» и «2014/2/1». однако я предпочитаю использовать библиотеку, нежели весь этот код. спасибо за вашу помощь;) – anony
Java-достаточно теперь с Hejrah Датой
(Related to Prophet Hejrah: على صاحبها أفضل الصلاة و أزكى التسليم إلى يوم الدين
):
Сниппет:
import java.time.*;
import java.time.chrono.HijrahChronology;
Date date=new 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
Но не каждая исламская страна следует официальному календарю Саудовской Аравии (вариант, поддерживаемый на Java-8), поэтому я бы сказал, что этого недостаточно. Даже местные власти внутри Саудовской Аравии имеют свои собственные отклоняющиеся обычаи. –
Раньше все исламские страны следовали официальному расписанию ислама (Хиджра). Однако оккупация этих стран крестоносцами требует своего Календаря как шаг к изменению личности людей ... К сожалению, они не достигли своей цели, потому что мы все еще مسلمين .. Спасибо за Аллаха –
Попробуйте ummalqura-calendar который реализует java.util.Calendar
.
Используя этот календарь, вы можете конвертировать из Umm Al-Qura в григорианский и наоборот, , а также можете использовать java.text.SimpleDateFormat
для форматирования дат.
спасибо за эту хорошо реализованную и задокументированную библиотеку –
образец способ преобразования даты на андроид импорта платформы
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));
}
- 1. Gregorian to Hijri (Islamic) date
- 2. Как преобразовать hijri в gregorian date by joda time
- 3. конвертировать gregorian в hijri date в RTF Template
- 4. Hijri and Gregorian DateTime constructor
- 5. Получить gregorian дату из Hijri даты строки
- 6. Преобразование JDE Julian date to Gregorian
- 7. Преобразование gregorian date to persian date (jalali) в Qt
- 8. Как преобразовать gregorian дни в gregorian date
- 9. Как преобразовать дату Hijri в gregorian в PHP?
- 10. Java - Преобразование даты и времени в gregorian calender time (date)
- 11. date-time string to boost :: gregorian :: date
- 12. Как перевести дату hijri в gregorian с помощью php?
- 13. Как форматировать Hijri Дата
- 14. Неправильно в преобразовании с григорианского на Hijri Date (Android Studio)
- 15. Показать gregorian календарь как календарь Hijri asp.net веб-формы
- 16. Отметьте даты Hijri Calendar
- 17. Преобразование gregorian date в persian (jalali) date в угловом 2 и Ionic 2
- 18. Как преобразовать строку в xml gregorian date date java
- 19. Как преобразовать std :: string в boost :: gregorian :: date?
- 20. Convert Boost Gregorian Date to POD
- 21. Как дата хранится внутри boost :: gregorian :: date?
- 22. R: chron - конвертировать юлианские дни в gregorian date
- 23. Преобразование строки в boost :: gregorian :: greg_month
- 24. Можно ли перевести григорианский в Hijri date в Vb?
- 25. Sql запрос, чтобы получить арабскую дату для gregorian date из базы данных
- 26. Как преобразовать Extjs Datepicker в Hijri date picker
- 27. Как преобразовать строку (Date) в gregorian calendar в android
- 28. Как преобразовать значение в days_ в boost :: gregorian :: date
- 29. Преобразование даты Excel с даты по номеру дня в Hijri date
- 30. Преобразование строки date date
вы пробовали что-нибудь? Вы столкнулись с какой-то особой проблемой? – araknoid
Я пробовал некоторые коды, найденные путем поиска, но не из них, вероятно, не работали. – anony