无法使用tryparse exact解析字符串到目前为止

时间:2016-10-11 18:32:04

标签: c# datetime tryparse

我正在从日志文件中读取一个字符串,其日期值如下:

 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

同样没有变化。

任何帮助都将不胜感激。

谢谢, 约翰

4 个答案:

答案 0 :(得分:2)

当您使用06时,您尝试使用yy解析数字日(dd):

ddd MMM dd HH:mm:ss yyyy

答案 1 :(得分:2)

我认为这是问题所在:

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年。这将为解析器造成混淆。

答案 2 :(得分:1)

我认为您的日期格式不正确“ddd MMM yy HH:mm:ss yyyy”必须

"ddd MMM dd HH:mm:ss yyyy"

答案 3 :(得分:0)

我的两分钱:

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