2011-07-24 17 views
18

¿Cuál es la forma más sencilla de imprimir C# DateTime en Persa? Actualmente estoy usando:Cómo imprimir en formato DateTime Pérsico en C#

static public string PersianDateString(DateTime d) 
{ 
    CultureInfo faIR = new CultureInfo("fa-IR"); 
    faIR.DateTimeFormat.Calendar = new PersianCalendar();    
    return d.ToString("yyyy/MM/dd", faIR); 
} 

que arroja una excepción

No es un calendario válido para la cultura dada

Respuesta

7

Trate de esta manera:

public static string PersianDateString(DateTime d) 
{ 
    CultureInfo faIR = new CultureInfo("fa-IR"); 
    return d.ToString("yyyy/MM/dd", faIR); 
} 

y si cambió el formato a, por ejemplo, "yyyy MMM ddd" que w debería obtener 2011 جوييه الأحد.

+1

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

+0

Probé este código en mi máquina y trabajé para la fecha persa, excelente respuesta. –

2

Puede utilizar esta:

static public string PersianDateString(DateTime d) 
{ 
    var pc = new PersianCalendar(); 
    return string.Format("{0:0000}/{1:00}/{2:00}", 
     pc.GetYear(d), pc.GetMonth(d), pc.GetDayOfMonth(d)); 
} 
+0

Eso es solo convertir la fecha al persa. Debes obtener puntos útiles. La pregunta sobre el formato como fecha persa. como este: چهارشنبه. پنجم آذر ماه 1392 y tu respuesta es utilidad. – QMaster

23

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();