PersianCalendar无法将年/月/ 31(日)转换为格里高利时

时间:2014-08-25 10:38:40

标签: c# datetime datetime-format persian datetime-conversion

我正在尝试将persianDate转换为standarddate。

public DateTime ConvertPersianToEnglish(string persianDate)
{
    string[] formats = { "yyyy/MM/dd", "yyyy/M/d", "yyyy/MM/d", "yyyy/M/dd" };
    DateTime d1 = DateTime.ParseExact(persianDate, formats,
                                      CultureInfo.CurrentCulture, DateTimeStyles.None);
    PersianCalendar persian_date = new PersianCalendar();
    DateTime dt = persian_date.ToDateTime(d1.Year, d1.Month, d1.Day, 0, 0, 0, 0, 0);
    return dt;
}

The Persiandate的格式如下:1392/10/12(年/月/日)

在我的应用程序中,我试图将年/月/ 31转换为标准时间但我收到此错误:

{System.FormatException: String was not recognized as a valid DateTime.
   at System.DateTimeParse.ParseExactMultiple(String s, String[] formats, DateTimeFormatInfo dtfi, DateTimeStyles style)

伊朗获得错误的确切价值是1393/04 / 31.6个月,每月31天。{/ p>

在主要我有这个代码:

 static void Main()
        {
            Thread.CurrentThread.CurrentUICulture = new CultureInfo("fa-IR");
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
           // Application.Run(new aaaa.Form1() );
            Application.Run(new frmLogin());
        }

1 个答案:

答案 0 :(得分:3)

因为在.NET框架中默认将new CultureInfo("fa-IR").Calendar设置为GregorianCalendar,并且在不使用反射的情况下无法更改为PersianCalendarmore info here

所以不要使用DateTime.ParseExact来解析波斯语日期,而是尝试使用以下方法:

   using System;
   using System.Globalization;
   using System.Linq;

    public static DateTime PersianDateToGregorianDate(string pDate)
    {
        var dateParts = pDate.Split(new[] { '/' }).Select(d => int.Parse(d)).ToArray();
        var hour = 0;
        var min = 0;
        var seconds = 0;
        return new DateTime(dateParts[0], dateParts[1], dateParts[2],
                            hour, min, seconds, new PersianCalendar());
    }

它适用于PersianDateToGregorianDate("1393/02/31")