How to print DateTime in Persian format in C#

Viewed 11537

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

5 Answers

I create this static class The result will be displayed in this format سه شنبه 28 اسفند 1398

public static class PersianDateString
{
    private static string[] Days = { "یک شنبه", "دو شنبه", "سه شنبه", "چهار شنبه", "پنج شنبه", "جمعه", "شنبه" };
    private static string[] Months = { "فروردین", "اریبهشت", "خرداد", "تیر", "مرداد", "شهریور", "مهر", "آبان", "آذر", "دی", "بهمن" , "اسفند" };
    private static PersianCalendar pc = new PersianCalendar();

    public static string ToPersianDateString(this DateTime date)
    {
        return ($"{Days[pc.GetDayOfWeek(date).GetHashCode()]} {pc.GetDayOfMonth(date)} {Months[pc.GetMonth(date) - 1]} {pc.GetYear(date)}");
    }

}

Usage

string ptime = DateTime.Now.ToPersianDateString();

This seams works too:

DateTime d= DateTime.Now;
Console.WriteLine( d.ToString("yyyy/MM/dd", new CultureInfo("fa-IR")) );

Outbut:

1399/06/26
Related