1

我正在尝试将 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;
}

波斯日期的格式如下: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天数。

在主要我有这个代码:

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

1 回答 1

3

因为在 .NET 框架中默认new CultureInfo("fa-IR").Calendar设置为,并且在不使用反射的情况下GregorianCalendar无法更改为。更多信息在这里PersianCalendar

所以不要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")

于 2014-08-25T13:20:45.133 回答