知道为什么这个DateTime.Parse会产生错误吗?

时间:2017-07-31 14:08:02

标签: c# parsing datetime

我不知道我在看什么......为什么会产生异常“字符串未被识别为有效的DateTime。”?

string dt = "7/28/‎2018 ‏‎2:48:32 PM";
try
{
  DateTime Test = DateTime.Parse(dt);
}
catch { }

在我评论之前,我已经多次介绍了我的代码,并将上面的内容替换为测试。我分配给dt的值实际上是在我的程序中分配的值。我最初使用的是:

if (DateTime.TryParse(dt, out DateTime Timestamp))
{ ... }

并不重要,但我使用的是Visual Studio 2017和.Net 4.6.2。

3 个答案:

答案 0 :(得分:3)

DateTime.Parse()会尝试猜测给定日期的格式。如果您确定日期始终采用特定格式,请使用ParseExact()

string dt = "7/28/‎2018 ‏‎2:48:32 PM";
try
{
    DateTime Test = DateTime.ParseExact(dt, "M/dd/yyyy h:mm:ss tt", CultureInfo.InvariantCulture);
}

请注意,h(也可以使用hh)代替HH,因为它是12小时格式而HH代表24小时格式

答案 1 :(得分:1)

DateTime.Parse对文化很敏感。默认情况下,它使用CultureInfo.CurrentCulture来获取正确的日期时间格式。如果需要使用不同的区域性来解析字符串,则需要使用带有IFormatProvider参数的Parse重载。

示例,在不变文化中(对持久性有用):

var dt = DateTime.Parse("07/31/2017 16:15:26", CultureInfo.InvariantCulture);
Console.Write(dt.ToString(CultureInfo.InvariantCulture)); // 07/31/2017 16:15:26

答案 2 :(得分:0)

问题出现在Visual Studio 2017中。重新安装,现在原始代码按预期工作。