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

C# 知道为什么这个DateTime.Parse会产生错误吗?,c#,parsing,datetime,C#,Parsing,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)

我不知道我在看什么。。。为什么生成的异常字符串未被识别为有效的日期时间

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。

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

请注意,hcan还使用hh而不是hh,因为它是12小时格式,hh表示24小时格式

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

例如,在对持久性有用的不变区域性中:

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

这是Visual Studio 2017中的一个问题。重新安装,现在原始代码按预期工作。

这意味着这不是当前区域性设置的标准日期和时间格式。尝试使用ParseExact或TryParseExact方法,而不是使用M/dd/yyyy h:mm:ss tt格式和适当的区域性(如不变量区域性)。请参阅下面的注释。我当前的区域性设置正确。我想使用当前区域性,日期和时间将采用当前区域性格式。我刚刚完成了Visual Studio的重新安装,现在它正在正确编译并生成预期的输出。我没有考虑Resd ParseExact,因为我不知道我在5月或5月将获得什么格式的时间,或者可能没有秒和/或am/pm。尽管如此,ParseExact仍然不起作用。因为没有,我在另一台机器上试了试,原来的代码成功了。我的机器出毛病了+1因为它让我想到在另一台机器上试用。谢谢你提供的信息。实际上,我想使用当前的文化。在华沙、特拉维夫、上海运行的情况下,我需要使用当地文化,输入将采用当地文化格式。它现在正在工作。我从另一台机器编译,没有更改代码。我的机器出毛病了。我正在删除Visual Studio并重新安装是的,我尝试重新启动。
var dt = DateTime.Parse("07/31/2017 16:15:26", CultureInfo.InvariantCulture);
Console.Write(dt.ToString(CultureInfo.InvariantCulture)); // 07/31/2017 16:15:26