无法使用 tryparse 精确解析字符串
Cannot parse string to date with tryparse exact
我正在从日志文件中读取日期值如下的字符串:
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
同样没有变化。
如有任何帮助,我们将不胜感激。
谢谢,
约翰
您正试图用 yy
解析数字日 (06
),而您应该使用 dd
:
ddd MMM dd HH:mm:ss yyyy
我认为这是问题所在:
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。这会给解析器造成混淆。
我的两分钱:
- "dd" 从未被设置,因为它从来没有被解析过 属性 所以“dd: Mon Jan 01 00:00:00 0001” 没有真正意义。
- 如果您的输入格式始终相同,请预先解析它,例如将最后 4 个字符 - year- 放在字符串的开头)
我认为你的日期格式不正确"ddd MMM yy HH:mm:ss yyyy"必须是
"ddd MMM dd HH:mm:ss yyyy"
我正在从日志文件中读取日期值如下的字符串:
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
同样没有变化。
如有任何帮助,我们将不胜感激。
谢谢, 约翰
您正试图用 yy
解析数字日 (06
),而您应该使用 dd
:
ddd MMM dd HH:mm:ss yyyy
我认为这是问题所在:
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。这会给解析器造成混淆。
我的两分钱:
- "dd" 从未被设置,因为它从来没有被解析过 属性 所以“dd: Mon Jan 01 00:00:00 0001” 没有真正意义。
- 如果您的输入格式始终相同,请预先解析它,例如将最后 4 个字符 - year- 放在字符串的开头)
我认为你的日期格式不正确"ddd MMM yy HH:mm:ss yyyy"必须是
"ddd MMM dd HH:mm:ss yyyy"