【问题标题】:Parsing non-standard string date to DateTime (ParseExact won't work)将非标准字符串日期解析为 DateTime(ParseExact 不起作用)
【发布时间】:2016-03-27 18:16:56
【问题描述】:

我正在开发一个 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。任何暗示这里可能会发生什么?

提前致谢。

【问题讨论】:

  • 你想要“d”而不是“dd”——而且你可能想要“yyyy”。到那时它应该可以工作了。
  • 就是乔恩,非常感谢。现在它没有读取某些日期,但至少它读取了其他一些日期,我知道我应该采取什么方向。

标签: c# wpf parsing datetime format


【解决方案1】:

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

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();
}

希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-10-08
    • 1970-01-01
    • 2013-11-21
    • 1970-01-01
    • 2011-03-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多