En primer lugar se debe observar que no se puede poner una fecha Jalali en un objeto DateTime, obtendrá una excepción en fechas como "31/02/1392".
por lo que debe manejar fechas de Jalali en una cadena o una costumbre de tipo DateTime.
que sugieren que mantenga su fecha como una fecha gregoriana en todo momento, y lo convierten cuando se necesita para demostrarlo.
Este es un método de extensión para conseguir Fecha persa de un objeto DateTime.
public static string GetPersianDate(this DateTime date)
{
PersianCalendar jc = new PersianCalendar();
return string.Format("{0:0000}/{1:00}/{2:00}", jc.GetYear(date), jc.GetMonth(date), jc.GetDayOfMonth(date));
}
//How to use it:
DateTime d = new DateTime(2014, 05, 21);
string s = d.GetPersianDate(); //1393/02/31
Y a continuación, cuando se tiene una fecha Jalali en formato de cadena aquí es el método de extensión para obtener la fecha gregoriana:
public static DateTime GetDateTimeFromJalaliString(this string jalaliDate)
{
PersianCalendar jc = new PersianCalendar();
try
{
string[] date = jalaliDate.Split('/');
int year = Convert.ToInt32(date[0]);
int month = Convert.ToInt32(date[1]);
int day = Convert.ToInt32(date[2]);
DateTime d = jc.ToDateTime(year, month, day, 0, 0, 0, 0, PersianCalendar.PersianEra);
return d;
}
catch
{
throw new FormatException("The input string must be in 0000/00/00 format.");
}
}
//How to use it:
string pdate = "1392/02/31";
DateTime dateFromJalali = pdate.GetDateTimeFromJalaliString(); //{5/21/2014 12:00:00 AM}
Y ahora para manejar funciones adicionales: Nombre del
Semana: nombre
public static string GetDayOfWeekName(this DateTime date)
{
switch (date.DayOfWeek)
{
case DayOfWeek.Saturday: return "شنبه";
case DayOfWeek.Sunday: return "يکشنبه";
case DayOfWeek.Monday: return "دوشنبه";
case DayOfWeek.Tuesday: return "سه شنبه";
case DayOfWeek.Wednesday: return "چهارشنبه";
case DayOfWeek.Thursday: return "پنجشنبه";
case DayOfWeek.Friday: return "جمعه";
default: return "";
}
}
//How to use it:
DateTime date = DateTime.Now;
string wname = date.GetDayOfWeekName();
Mes:
public static string GetMonthName(this DateTime date)
{
PersianCalendar jc = new PersianCalendar();
string pdate = string.Format("{0:0000}/{1:00}/{2:00}", jc.GetYear(date), jc.GetMonth(date), jc.GetDayOfMonth(date));
string[] dates = pdate.Split('/');
int month = Convert.ToInt32(dates[1]);
switch (month)
{
case 1: return "فررودين";
case 2: return "ارديبهشت";
case 3: return "خرداد";
case 4: return "تير";
case 5: return "مرداد";
case 6: return "شهريور";
case 7: return "مهر";
case 8: return "آبان";
case 9: return "آذر";
case 10: return "دي";
case 11: return "بهمن";
case 12: return "اسفند";
default: return "";
}
}
//How to use it:
DateTime date = DateTime.Now;
string mname = date.GetMonthName();
Las cosas más importantes es que no es capaz de imprimir nombres persas entre semana y mes y sólo imprimir los nombres árabes. Los nombres de los meses persas son فروردین - اردیبهشت - خرداد etc. y los nombres de los días de la semana persa son شنبه - یکشنبه etc. Esto es completamente útil. – QMaster
Probé este código en mi máquina y trabajé para la fecha persa, excelente respuesta. –