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

标签 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);
}

抛出异常

Not a valid calendar for the given culture

最佳答案

首先您必须注意,您不能将 Jalali Date 放入 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

然后当你有一个字符串格式的 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}

现在要处理额外的功能:

周名:

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

月份名称:

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

关于c# - 如何在 C# 中以波斯语格式打印 DateTime,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6807234/

相关文章:

c# - 在 C# 中从 WebClient 读取响应 header

c# - Rx 中的高级历史流和实时流

c# - decimal.TryParse 返回 false

C# 文化信息/为货币设置特定的字符串

c# - 字符串驻留和referenceEquals

java - c#模型抽象和泛型,像Java一样强制转换未知泛型

c# - 如何在 C# 中克隆 DateTime 对象?

python - 使用torndb python进行日期时间格式化

c# - 如何使 DateTime 独立于当前文化?

c# - 从 EF 4.0 ObjectContext 升级到 EF 6/6.1