gpt4 book ai didi

c# - 如何根据 PC 区域设置将字符串解析为 DateTime

转载 作者:行者123 更新时间:2023-11-30 17:03:16 25 4
gpt4 key购买 nike

以下代码:

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

最佳答案

看来您的 DateSeperatorTimeSeperator 是一样的。在本例中是 .

虽然将 DateTime 转换为字符串框架只是将 . 放在那些分隔符的位置,因此转换为字符串可以顺利进行。

但是当 datetime 解析器找到 . 字符将其解析回 DateTime 时,它没有任何线索来查找元素是否为 Date 部分时间部分。因此它失败了。

这是重现问题并显示修复的片段。

        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 带来麻烦,因此它会失败。 :)

关于c# - 如何根据 PC 区域设置将字符串解析为 DateTime,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18783614/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com