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

时间:2016-03-27 18:16:57

标签: c# wpf parsing datetime format

我正在研究一个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.");
        }              

您可以在输入端看到的注释是实际的字符串格式,看起来就是这样。 “格式”是我试图让DateTime理解它,我也尝试删除年后的逗号,仍然没有工作。我不确定这种文化是否会引发问题,但我担心我的专业知识还不够。事实是,解析失败,我将日期设置为1/1/0001 12:00:00 AM。有什么迹象表明这里会发生什么?

提前致谢。

1 个答案:

答案 0 :(得分:2)

使解决方案更加“普及”#34;您可以指定多种格式并使用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();
}

希望这可能会有所帮助。