繁体   English   中英

DateTime.TryParseExact()返回混合结果

[英]DateTime.TryParseExact() is returning mixed results

我正在尝试解析一个包含一些DateTime线的巨大文件。 由于某种原因,DateTime.TryParseExact仅在某些行上返回true而不在其他行上返回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");  

我的输出是:





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

任何帮助解决这个问题将不胜感激。

因为MM说明符为月份, mm说明符为分钟。

在您的情况下, 只有当您的字符串具有相同的分钟和月份值时,才会对其进行解析。

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

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

改变这一行并检查

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)

它会起作用

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM