3

以下代码:

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 程序。

4

1 回答 1

3

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

虽然转换DateTime为字符串框架只是.代替那些分隔符,因此转换为字符串可以顺利进行。

但是当将它解析回DateTimedatetime 解析器找到.字符时,它没有任何线索来查找元素是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");

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

于 2013-09-13T10:50:35.007 回答