字符串在将日期从回历日期转换为公历日期时未被识别为有效的日期时间

本文关键字:日期 识别 有效 时间 转换 字符串 | 更新日期: 2023-09-27 18:18:44

我正在尝试将回历日期转换为公历日期我遵循这篇文章,我的代码如下:

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

我得到的字符串不被识别为有效的日期时间。有人能告诉我这个代码有什么问题吗?

字符串在将日期从回历日期转换为公历日期时未被识别为有效的日期时间

我想我是对的,但是…让我们至少试一试。

首先,DateTime值在公历中基本上总是。没有所谓的"UmAlQuraCalendar日历中的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);
}

注意:由于TwoDigitYearMaxUmAlQuraCalendar日历的1451,您的36将被解析为1436yy格式说明符。

这完全解析了你的问题,但是等等!结果是什么?

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