将日期从Hijri转换为Gregorian日期时,字符串未被识别为有效的日期时间

时间:2015-10-22 10:28:30

标签: c# datetime

我正在尝试将Hijri日期转换为格里高利日期我正在关注this文章,我的代码如下:

var cultureInfo = CultureInfo.CreateSpecificCulture("ar-sa");
string date = "19/12/36 12:00:00 ص";

获取

  

字符串未被识别为有效日期时间

下面的

错误

DateTime tempDate = DateTime.ParseExact(date, "dd/MM/yyyy", cultureInfo.DateTimeFormat, DateTimeStyles.AllowInnerWhite);
lblDate.Text = tempDate.ToString("dd/MM/yyyy");

我收到的字符串未被识别为有效的日期时间。请问有人告诉我这段代码有什么问题吗?

1 个答案:

答案 0 :(得分:3)

我认为我的方式正确但是......让我们至少尝试一下。

首先,基本上格里高利历中的DateTime值始终始终。在UmAlQuraCalendar日历中没有" A DateTime" - 由ar-sa文化使用 - 您必须使用UmAlQuraCalendar以特定方式解释DateTime

其次,当您使用DateTime.ParseExact解析字符串时,您的字符串和格式会根据您使用的文化与完全匹配。自ص以来 字符似乎是ar-sa文化的AMDesignator,您应该在时间部分提供tt说明符。

string s = "19/12/36 12:00:00 ص";
DateTime dt;
if(DateTime.TryParseExact(s, "dd/MM/yy hh:mm:ss tt", CultureInfo.GetCultureInfo("ar-sa"),
                          DateTimeStyles.None, out dt))
{
    Console.WriteLine(dt);
}

注意:由于TwoDigitYearMax1451日历的UmAlQuraCalendar,因此36将被1436解析为yy格式说明符。< / p>

这完美地解析了你的问题,但等待!结果会是什么?在这里。

02/10/2015 00:00:00

为什么呢?正如我在顶部所说,您必须使用UmAlQuraCalendar来解释此DateTime实例。

UmAlQuraCalendar ul = new UmAlQuraCalendar();
Console.WriteLine(ul.GetYear(dt)); // 1436
Console.WriteLine(ul.GetMonth(dt)); // 12
Console.WriteLine(ul.GetDayOfMonth(dt)); // 19