首页 文章

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

提问于
浏览
2

我正在尝试将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 回答

  • 3

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

    首先, DateTime 值总是在格里高利历中 . 没有“a DateTime in a UmAlQuraCalendar calendar” - 这是由 ar-sa 文化使用 - 你必须使用 UmAlQuraCalendar 以特定方式解释 DateTime .

    其次,当您使用 DateTime.ParseExact 解析字符串时,您的字符串和格式会根据您使用的文化与 exactly 匹配 . 由于 ص 字符似乎是 ar-saar-sa 文化,因此您应该提供 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);
    }
    

    注意:由于TwoDigitYearMax1451UmAlQuraCalendar 日历,因此 36 将被解析为带有 yy 格式说明符的 1436 .

    这完美地解析了你的问题但 WAIT! 会有什么结果?这里是 .

    02/10/2015 00:00:00
    

    为什么?正如我在顶部所说,你 have to 使用 UmAlQuraCalendar 来解释这个 DateTime 实例 .

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

相关问题