如何按照PC区域设置将字符串解析为日期时间
本文关键字:日期 时间 字符串 何按照 PC 区域 设置 | 更新日期: 2023-09-27 18:31:07
以下代码:
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程序。
看来你的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
带来麻烦,因此它会失败。:)