.NET ¿Cómo analizar una cadena de fecha persa / farsi (calendario Jalali) en un objeto de fecha y hora?

StackOverflow https://stackoverflow.com/questions/5811170

  •  25-10-2019
  •  | 
  •  

Pregunta

Me he encontrado con varias bibliotecas de código excelentes para convertir una fecha persa (calendario de Jalali) en una fecha gregoriana. Sin embargo, mi fuente original es una cadena, no un objeto de fecha y hora. No parece haber apoyo oficial en el marco .NET para analizar las fechas de análisis del calendario persa (si estoy equivocado, ¡muéstreme!).

Mi meta:

string persianDateString="1390/02/07";
DateTime persianDateTime = MyPersianParser.Parse(persianDateString, "yyyy/mm/dd");

Y, por supuesto, algunas fechas pueden usar nombres de palabras durante meses y días de la semana, por lo que me gustaría poder apoyar el protocolo de cadena de formato estándar.

EDITAR: Conozco la funcionalidad típica de DateTime.Parse. El calendario persa no se puede usar porque Microsoft lo dejó incompleto y/o no lo solucionará. Si alguien puede señalarme algún código de análisis de citas persa, estaría agradecido. Si no, solicitaré que alguien elimine la pregunta y simplemente la escriba yo mismo.

¿Fue útil?

Solución 2

Para analizar la cadena de fecha, simplemente uso el calendario predeterminado para obtener los valores de fecha (año, mes, día, etc.)

Entonces uso esta biblioteca aquí Para convertir los valores de fecha persa a los valores de fecha gregoriana.

Mi código ahora se ve así:

string persianDate = "1390/02/07";
CultureInfo persianCulture = new CultureInfo("fa-IR");
DateTime persianDateTime = DateTime.ParseExact(persianDate, "yyyy/MM/dd", persianCulture);    // this parses the date as if it were Gregorian

JalaliCalendar jc = new JalaliCalendar();
// convert the Persian calendar date to Gregorian
DateTime gregorianDateTime = jc.ToDateTime(persianDateTime.Year, persianDateTime.Month, persianDateTime.Day, persianDateTime.Hour, persianDateTime.Minute, persianDateTime.Second, persianDateTime.Millisecond);

Por supuesto, tendré que cuidar los componentes de la fecha con los nombres (meses, días de la semana), pero puedo lidiar con eso con bastante facilidad.

Otros consejos

Siempre puede usar el sistema nativo.globalization.persiancalendar .net clase. Pero es un poco complicado.

Considere este código para convertir desde la fecha de Jalali (aquí 1387/03/18) a Gregorian DateTime:

System.Globalization.PersianCalendar persianCal = new System.Globalization.PersianCalendar();
    DateTime GregorianDate = persianCal.ToDateTime(1387, 3, 18, 12, 0, 0, 0);

y el siguiente código para convertir un Gregorian DateTime (aquí 1983/08/03) en cadena de fecha persa:

DateTime GregorianDate = DateTime.Parse("1983/08/03");
string FarsiDateConverted = persianCal.GetYear(GregorianDate).ToString("0000") + "/" +
             persianCal.GetMonth(GregorianDate).ToString("00") + "/" +
             persianCal.GetDayOfMonth(GregorianDate).ToString("00");

Solo una nota para el enlace proporcionado por el alguacil de @Dan Debería repetir el autor de las palabras del artículo:

"El objetivo principal para usar este Jalaicalendar en lugar del persiacalendario del marco de .NET debe ser la necesidad de una conversación de fecha para eventos históricos. Si solo desea mostrar la fecha actual en su sitio web, Persiancalendar es suficiente".

De hecho, el algoritmo de .NET Framework es correcto para los años 1178 a 1634 Jalali (1799 a 2256 Gregorian)

Actualizar:

Comenzando con .NET Framework 4.6, la clase persiacalendar usa el hijri algoritmo astronómico solar en lugar de un algoritmo de observación para calcular las fechas. Esto hace que la implementación persiacalendar sea consistente con el calendario persa en uso en Irán y Afganistán, los dos países en los que el calendario persa está en mayor uso. Entonces, si usa> 4.6 versión de .NET Framework, no necesita ninguna otra biblioteca para convertir fechas en/desde el calendario persa.

O:

using System.Globalization;

CultureInfo MyCultureInfo = new CultureInfo("fa-IR");
      string MyString = "1390/02/07";
      DateTime MyDateTime = DateTime.Parse(MyString, MyCultureInfo);

Hay más ejemplo:http://msdn.microsoft.com/en-us/library/2h3syy57.aspx#y418

Pruébelo en ASP.NET MVC para validar la fecha persa

 [RegularExpression(@"^$|^([1۱][۰-۹ 0-9]{3}[/\/]([0 ۰][۱-۶ 1-6])[/\/]([0 ۰][۱-۹ 1-9]|[۱۲12][۰-۹ 0-9]|[3۳][01۰۱])|[1۱][۰-۹ 0-9]{3}[/\/]([۰0][۷-۹ 7-9]|[1۱][۰۱۲012])[/\/]([۰0][1-9 ۱-۹]|[12۱۲][0-9 ۰-۹]|(30|۳۰)))$", ErrorMessage = "Not Validate")]

Para obtener más información sobre Validar la fecha persa, visite este enlace

اós itudva

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top