以下代码:
string s = DateTime.Now.ToString();
DateTime dt;
DateTime.TryParse(s, out dt);
textBox1.AppendText(s + "\n");
textBox1.AppendText(DateTime.Now + "\n");
textBox1.AppendText(dt.ToString() + "\n");
DateTime.TryParse(s,
CultureInfo.CurrentCulture.DateTimeFormat,
DateTimeStyles.None,
out dt);
textBox1.AppendText(dt.ToString() + "\n");
在文本框中生成以下输出:
13.09.2013 1602.38
13.09.2013 1602.38
01.01.0001 0000.00
01.01.0001 0000.00
为什么TryParse
无法解析字符串s
以纠正DateTime
对象?我希望我的程序能够正确解析格式为s
的字符串。我怎么能这样做?
这是在.NET Framework 4上运行的C#WPF程序。
答案 0 :(得分:2)
您的DateSeperator
和TimeSeperator
似乎相同。在这种情况下,它是.
将DateTime
转换为字符串框架时,只需将.
放在那些分隔符的位置,这样转换为字符串就可以顺利进行。
但是当日期时间解析器找到DateTime
字符时将其解析回.
时,它没有任何线索来查找元素是Date part
还是Time part
。因此失败了。
以下是重现问题的片段,并显示修复程序。
CultureInfo c = new CultureInfo("en-us", true);
c.DateTimeFormat.DateSeparator = ".";
//c.DateTimeFormat.TimeSeparator= ".";//this will fail
c.DateTimeFormat.TimeSeparator= ":";//this will work since TimeSeparator and DateSeparator are different.
Thread.CurrentThread.CurrentCulture = c;
string s = DateTime.Now.ToString();
DateTime dt;
DateTime.TryParse(s, out dt);
Console.WriteLine(s + "\n");
Console.WriteLine(DateTime.Now + "\n");
Console.WriteLine(dt.ToString() + "\n");
DateTime.TryParse(s,
CultureInfo.CurrentCulture.DateTimeFormat,
DateTimeStyles.None,
out dt);
Console.WriteLine(dt.ToString() + "\n");
结论:
您不应将DateTimeFormat
和TimeSeparator
设置为相同的值。这样做会给运行时解析DateTime
带来麻烦,因此失败了。 :)