如何按照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程序。

如何按照PC区域设置将字符串解析为日期时间

看来你的DateSeperatorTimeSeperator是一样的。在这种情况下,它是.

虽然将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");

结论:不应将DateTimeFormatTimeSeparator设置为相同的值。这样做会给运行时解析DateTime带来麻烦,因此它会失败。:)