如何在C#中以波斯格式打印DateTime

use*_*747 25 c# datetime cultureinfo persian

在波斯语中打印c#DateTime最简单的方法是什么?目前我正在使用:

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

这引发了异常

不是给定文化的有效日历

Ash*_*rat 33

首先,您必须注意,您不能将Jalali日期放在DateTime对象中,您将在"1392/02/31"之类的日期中获得异常.

因此,您必须以字符串或自定义DateTime类型处理Jalali日期.

我建议您将日期保持为格里高利日期,并在需要显示时将其转换.

这是从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
Run Code Online (Sandbox Code Playgroud)

然后当你有一个字符串格式的Jalali日期时,这里是获取格里高利日期的扩展方法:

    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}
Run Code Online (Sandbox Code Playgroud)

现在要处理额外的功能:

周名称:

    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();
Run Code Online (Sandbox Code Playgroud)

月份名称:

    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();
Run Code Online (Sandbox Code Playgroud)


Dar*_*rov 11

试试这样:

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

如果您将格式更改为例如"yyyy MMM ddd"您将获得2011 ????? ?????.