2016-10-11 58 views
-1

我读从日志文件中的字符串,这样的日期值:无法解析字符串日期的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 

以及没有变化。

任何帮助,将不胜感激。

感谢, 约翰

+0

您应该使用 “DDD MMM DD HH:MM:SS YYYY”。 – itsme86

+0

您是否正在阅读当月的某一天? –

回答

1

我认为你的日期格式不正确“DDD MMM YY HH:MM:SS YYYY”必须

"ddd MMM dd HH:mm:ss yyyy" 
+0

这是正确的。我错过了。当我将其更改为dd时,它使用TryParseExact完美工作。显然,我的大脑被冻结成思考“日月日”而不是“日日月日”。感谢所有指出我错误的人。约翰 – John

2

您正试图解析数字天(06)与yy时,你应该使用dd

ddd MMM dd HH:mm:ss yyyy 
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年。这会造成解析器的混淆。

0

我的两分钱:

  1. “DD”表示从来没有,因为这是从来没有在第一时间解析属性格式使“DD:周一01月01 00:00:00 0001”并没有太大意义。
  2. 如果你的输入格式始终是相同的,预解析它例如把最后4个字符 - 年 - 在字符串的开头)