Tengo trabajo en muchos proyectos con conversiones de fechas. por ejemplo, trabajo en el calendario solar y cómo convertirlos a fechas gregorianas y viceversa. El calendario solar (calendario persa) es casi similar a la fecha gregoriana en términos de la cantidad de días en un año [salto o no].
Pero recientemente trabajé en un proyecto con el calendario lunar. A medida que investigo sobre el calendario lunar, me di cuenta de que no hay ningún método lógico único para convertir el sistema lunar a solar (al menos hasta donde yo sé).
Aquí hay algunos enlaces de referencias que investigué sobre ellos:
- No se puede convertir de la fecha Hijri a la fecha gregoriana (c #)
- Convertir la fecha del calendario Hijri al calendario gregoriano y viceversa
- Hijri Date To gregorian usando DateTime.Parse
- Convertir fecha Hijri a dat gregoriano
Cuando seguí los enlaces anteriores, la capacitación y las pruebas de las personas presentaron algoritmos, noté que ninguno de ellos es absolutamente correcto.
Baste decir, solo convierta "1441/02/30" [Safar 30th]
a la fecha gregoriana en cada método que desee probar.
La siguiente imagen es útil para el ejemplo mencionado anteriormente.
Puse aquí algunos códigos de prueba y falla:
CultureInfo arSA = new CultureInfo("ar-SA");
arSA.DateTimeFormat.Calendar = new HijriCalendar();
var dateValue = DateTime.ParseExact("1441/02/30", "yyyy/MM/dd", arSA);
return dateValue.ToString();
El error para el código anterior:
El DateTime representado por la cadena no se admite en el calendario System.Globalization.HijriCalendar.
HijriCalendar hc = new HijriCalendar();
DateTime date = new DateTime(1441, 2, 30, hc);
return date.ToString();
El error para el código anterior:
"El día debe ser entre 1 y 29 para el mes 2".
string hijri = "1441/2/30";
HijriCalendar hc = new HijriCalendar();
int year = int.Parse(hijri.Substring(0, 4));
string rem = hijri.Remove(0, 5);
int end = rem.IndexOf('/', 0);
int month = int.Parse(rem.Substring(0, end));
rem = rem.Remove(0, end + 1);
int day = int.Parse(rem);
DateTime date = new DateTime(year, month, day, hc);
return date.ToShortDateString();
El error para el código anterior:
"El día debe ser entre 1 y 29 para el mes 2".
Después de eso, estaba tratando de entender que ¿hay algún algoritmo para implementar la fecha de conversión de Hijri a la fecha gregoriana?
¡Así que probé un conversor de fechas islámico en línea y me sorprendió!
Solo intente ingresar "1441/2/30"
en ambos convertidores de fecha.
el primero regresa October 30, 2019
y el segundo regresa 29 October 2019
Hijri gregorian-converter convertidor de
fecha islámico - Gregorian Calendar Converter
Así que no sé si hay algún algoritmo real para convertir las fechas de Hijri a gregoriano.
Gracias de antemano por tu tiempo.
Para obtener más información, https://www.wikiwand.com/simple/Islamic_calendar
Actualización : Sé que no hay ninguna biblioteca correcta para saber. pero si alguien tiene conocimiento o detalles sobre el Calendario Hijri (toda su interfaz), simplemente describa aquí. Realmente quiero implementar un calendario Hijri para todos.
October 30, 2019 wed
oOctober 29, 2019 tue
. Lo intenté ahora.Omar khayyam
el matemático persa. El calendario persa tiene 365 días (366 en un año bisiesto), pero el calendario lunar es 11-12 días menor que el calendario persa.Respuestas:
Puede usar algo como este código para convertir y analizar cadenas de calendario hijri a gregoriano DateTime.
fuente
Day must be between 1 and 29 for month 2. Parameter name: day
. Como discutimos antes en los comentarios de mi publicación, El Safar de otro mes Hijri (lunar) tiene un recuento de días variables. su solución tiene el mismo error similar a otras soluciones.