DateTime.TryParseExact()返回混合结果

时间:2015-03-05 07:34:30

标签: c# datetime tryparse

我试图解析一个包含一些DateTime线的巨大文件。 由于某种原因,DateTime.TryParseExact仅在某些行上返回true而不是其他行 我的DateParse.txt文件看起来像这样:

  

2015-02-27 01:01:30
   2015-02-27 01:01:43
   2015-02-27 01:01:53
   2015-02-27 01:02:05
   2015-02-27 01:02:15
   2015-02-27 01:02:36
   2015-02-27 01:02:51
   2015-02-27 01:03:04
   2015-02-27 01:03:21
   2015-02-27 01:03:36
   2015-02-27 01:03:46
   2015-02-27 01:04:01
   2015-02-27 01:04:13
   2015-02-27 01:04:29
   2015-02-27 01:04:40

string line;  
DateTime DateTime;  
    using (StreamReader Date = new StreamReader("C:\\DateParse.txt")  
        while((line = Date.ReadLine()) != null)  
            if (DateTime.TryParseExact(line, "yyyy-mm-dd HH:mm:ss", System.Globalization.CultureInfo.InvariantCulture, System.Globalization.DateTimeStyles.AssumeUniversal, out DateTime))  
                Console.WriteLine("True");  
            else  
                Console.WriteLine("False");  

我的输出是:

  


  假
  假
  假
  真
  真
  真
  真
  其余的都是假的......

任何帮助解决这个问题都将非常感激。

4 个答案:

答案 0 :(得分:5)

因为MM specifier需要几个月而mm specifier需要几分钟。

在您的情况下,如果您的字符串具有相同的分钟和月份值,则将对其进行解析。

这就是为什么只有这些值成功解析的原因。

2015-02-27 01:02:05
2015-02-27 01:02:15
2015-02-27 01:02:36
2015-02-27 01:02:51

顺便说一句,当我的意思是成功时,这并不意味着它返回正确的DateTime值。由于您未提及yyyy-mm-dd HH:mm:ss格式的任何月份部分,因此默认情况下,DateTime的月份部分将为1。这就是为什么在解析操作后他们的DateTime值将是;

2015-01-27 01:02:05
2015-01-27 01:02:15
2015-01-27 01:02:36
2015-01-27 01:02:51

这是基于您的字符串的错误值。

在您的情况下,正确的格式应为yyyy-MM-dd HH:mm:ss

答案 1 :(得分:3)

更改此行并检查

if (DateTime.TryParseExact(line, "yyyy-MM-dd HH:mm:ss", System.Globalization.CultureInfo.InvariantCulture, System.Globalization.DateTimeStyles.AssumeUniversal, out DateTime))  

答案 2 :(得分:1)

using (StreamReader Date = new StreamReader("C:\\DateParse.txt")  
        while((line = Date.ReadLine()) != null)  
            if (DateTime.TryParseExact(line.Trim(), "yyyy-MM-dd HH:mm:ss", System.Globalization.CultureInfo.InvariantCulture, System.Globalization.DateTimeStyles.AssumeUniversal, out DateTime))  
                Console.WriteLine("True");  
            else  
                Console.WriteLine("False"); 

使用line.Trim()yyyy-MM-dd HH:mm:ss其中MM表示月份,mm表示分钟

答案 3 :(得分:0)

只需将mm mont更改为MM

DateTime.TryParseExact(line, "yyyy-MM-dd HH:mm:ss", System.Globalization.CultureInfo.InvariantCulture, System.Globalization.DateTimeStyles.AssumeUniversal, out DateTime)

它会工作