Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to print DateTime in Persian format in C#

What is the simplest way to print c# DateTime in Persian? currently I'm using :

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

Which throws an exception

Not a valid calendar for the given culture

like image 935
user590747 Avatar asked Jul 24 '11 14:07

user590747


1 Answers

First you must note that you cannot put a Jalali Date in a DateTime object, you will get an exception in dates like "1392/02/31".

So you must handle your Jalali dates in a string or a custom DateTime type.

I suggest that you keep your date as a Gregorian date at all time, and convert it when you need to show it.

This is an extension method to get Persian Date from a DateTime object.

    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 

And then when you have a Jalali date in string format here is the extension method to get the Gregorian date:

    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} 

And now to handle extra functions:

Week name:

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

Month name:

    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(); 
like image 95
Ashkan Ghodrat Avatar answered Sep 19 '22 12:09

Ashkan Ghodrat