我正在尝试将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());
}
答案 0 :(得分:3)
因为在.NET框架中默认将new CultureInfo("fa-IR").Calendar
设置为GregorianCalendar
,并且在不使用反射的情况下无法更改为PersianCalendar
。 more 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")