无法使用 tryparse 精确解析字符串

Cannot parse string to date with tryparse exact

我正在从日志文件中读取日期值如下的字符串:

 Thu Oct 06 15:38:45 2016

显然

 DateTime.TryParse()...

不会处理那个。所以,我尝试使用

 DateTime.TryParseExact()

像这样:

        string szDateFormat = "ddd MMM yy HH:mm:ss yyyy";
        string szTest = "Thu Oct 06 15:38:45 2016";
        DateTime dd;
        DateTime.TryParse(szTest, out dd);

        CultureInfo current = CultureInfo.CurrentCulture;
        CultureInfo newculture = new CultureInfo("en-US");

        Console.WriteLine(current);
        Console.WriteLine(newculture);

        Console.WriteLine(String.Format("  Test: {0}", szTest));
        Console.WriteLine(String.Format("Format: {0}", szDateFormat));
        Console.WriteLine(String.Format("    dd: {0:ddd MMM yy HH:mm:ss yyyy}", dd));
        Console.WriteLine("");


        DateTime.TryParseExact(szTest, szDateFormat, CultureInfo.InvariantCulture, DateTimeStyles.None, out dd);
        Console.WriteLine(String.Format("  Test: {0}", szTest));
        Console.WriteLine(String.Format("Format: {0}", szDateFormat));
        Console.WriteLine(String.Format("    dd: {0:ddd MMM yy HH:mm:ss yyyy}", dd));
        Console.WriteLine("");

结果是这样的:

    en-US
    en-US
      Test: Thu Oct 06 15:38:45 2016
    Format: ddd MMM yy HH:mm:ss yyyy
        dd: Mon Jan 01 00:00:00 0001

      Test: Thu Oct 06 15:38:45 2016
    Format: ddd MMM yy HH:mm:ss yyyy
        dd: Mon Jan 01 00:00:00 0001

在之前的迭代中我使用了

CultureInfo.CurrentCulture

同样没有变化。

如有任何帮助,我们将不胜感激。

谢谢, 约翰

您正试图用 yy 解析数字日 (06),而您应该使用 dd:

ddd MMM dd HH:mm:ss yyyy

我认为这是问题所在:

string szDateFormat = "ddd MMM yy HH:mm:ss yyyy";
string szTest = "Thu Oct 06 15:38:45 2016";

格式应为:

ddd MMM dd HH:mm:ss yyyy

如果要解析:

Thursday 06.10.2016 15:38:45

第三个参数yy应该是dd,因为它会与最后一个参数yyyy冲突。 yy 指向 2006,但 yyyy 指的是 2016。这会给解析器造成混淆。

我的两分钱:

  1. "dd" 从未被设置,因为它从来没有被解析过 属性 所以“dd: Mon Jan 01 00:00:00 0001” 没有真正意义。
  2. 如果您的输入格式始终相同,请预先解析它,例如将最后 4 个字符 - year- 放在字符串的开头)

我认为你的日期格式不正确"ddd MMM yy HH:mm:ss yyyy"必须是

"ddd MMM dd HH:mm:ss yyyy"