DateTime.TryParseExact() 返回混合结果

DateTime.TryParseExact() is returning mixed results

我正在尝试解析一个巨大的文件,其中包含一些 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");  

我的输出是:

False
False
False
False
True
True
True
True
And the rest are false...

如果能帮助解决这个问题,我们将不胜感激。

因为 MM specifier for months and 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

顺便说一句,当我说成功时,这并不意味着 returns 正确的 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

更改此行并检查

if (DateTime.TryParseExact(line, "yyyy-MM-dd HH:mm:ss", System.Globalization.CultureInfo.InvariantCulture, System.Globalization.DateTimeStyles.AssumeUniversal, out DateTime))  
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 表示分钟

只需将 mm mont 更改为 MM

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

它会起作用