将非标准字符串日期解析为 DateTime(ParseExact 不起作用)



我正在开发一个C#-WPF解析器,该解析器从文档中读取行并创建具有多个字段的对象,其中包括一个"添加日期"字段。问题:日期是非标准的西班牙语格式,我无法使DateTime.ParseExact工作,正如我的研究所表明的那样。这是代码:

        string input = dateAddedStringSPA;  //domingo 2 septiembre 2012, 23:54:20
        string format = "dddd dd MMMM yyy, HH:mm:ss";
        CultureInfo cultureInfo = new CultureInfo("es-ES");
        DateTime dateAddedSPA;
        try
        {
            dateAddedSPA = DateTime.ParseExact(input, format, cultureInfo);                
            if (dateAddedSPA == DateTime.MinValue) 
            {
                clipping.DateAdded = DateTime.Now; /*Added this conditional workaround to avoid an exception if parsing fails (and always fails). While this doesn't work every object will have the same date: current. */
            }
            else
            {
                clipping.DateAdded = dateAddedSPA;
            }             
        }
        catch (Exception)
        {
            throw new Exception("Error encountered while adding date.");
        }              

您可以在输入旁边看到的注释是实际的字符串格式,看起来是这样的。"format"是我试图让DateTime理解它,我也尝试在一年后删除逗号,但仍然没有成功。我不确定是不是文化造成了问题,但恐怕我的专业知识还不够,还不知道。问题是,解析失败,我将日期设置为1/0000112:00:00 AM。有没有迹象表明这里会发生什么?

提前谢谢。

为了使解决方案更加"通用",您可以指定多种格式并使用TryParseExact().NET/C#方法,如以下演示示例代码片段所示:

CultureInfo cultureInfo = new CultureInfo("es-ES");
string[] formats ={"dddd d MMMM yyy, HH:mm:ss", "dddd d MMMM yyy, HH:mm:ss"};
string input = "domingo 2 septiembre 2012, 23:54:20";
DateTime dt;
if (DateTime.TryParseExact(input, formats, cultureInfo, DateTimeStyles.None, out dt));
{
    if (dt<DateTime.Now)
    Console.WriteLine("OK");
    Console.ReadKey();
}

希望这能有所帮助。

最新更新