2011-07-24 8 views
18

Jaki jest najprostszy sposób wydrukowania C# DateTime w języku perskim? obecnie używam:Jak wydrukować DateTime w formacie perskim w 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); 
} 

Która zgłasza wyjątek

Nieprawidłowy kalendarz dla danej kultury

Odpowiedz

7

Spróbuj tak:

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

i jeśli zmieniłeś format na np. "yyyy MMM ddd" ty w może uzyskać 2011 جوييه الأحد.

+1

Najważniejsze jest to, że nie można drukować perskich nazw dni w dni robocze i miesiąca i wystarczy wydrukować arabskie nazwy. Nazwy w języku perskim to: فروردین - اردیبهشت - خرداد itd., A nazwy w języku perskim to شنبه - یکشنبه itd. Jest to całkowicie przydatne. – QMaster

+0

Przetestowałem ten kod na moim komputerze i pracowałem dla Perskiej daty, świetna odpowiedź. –

2

Można to wykorzystać:

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

To jest po prostu konwertować datę na Perski. Musisz zdobyć użyteczne punkty. Pytanie o formatowanie jako data perska. tak: چهارشنبه. پنجم آذر ماه 1392 i twoja odpowiedź jest przydatna. – QMaster

23

pierwsze należy pamiętać, że nie można umieścić Jalali Data w obiekcie DateTime, dostaniesz wyjątek w terminach jak „1392/02/31”.

Musisz więc obsłużyć daty Jalali ciągiem lub niestandardowym typem DateTime.

Proponuję, aby zachować datę jako datę gregoriańską przez cały czas i przekonwertować ją, gdy trzeba ją pokazać.

Jest to metoda przedłużania, aby uzyskać datę perską z obiektu 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 

A kiedy masz termin Jalali w formacie strun oto metodę rozszerzenia aby uzyskać datę gregoriański:

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} 

A teraz obsługiwać dodatkowe funkcje: imię

tygodniu: Nazwa

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

Miesiąc:

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