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