C# 获取错误:字符串在c中未被识别为有效的日期时间#

C# 获取错误:字符串在c中未被识别为有效的日期时间#,c#,string,datetime,datetime-parsing,C#,String,Datetime,Datetime Parsing,获取错误,如: mscorlib.dll中发生类型为“System.FormatException”的未处理异常。其他信息:字符串未被识别为有效的日期时间 我正在使用以下代码: string datetime = DateTime.Parse(encrypt[1]); 或 加密是一个字符串数组 在加密[1]中,我不确定哪种格式将以字符串形式出现。我跟踪了一段时间dd/MM/yyyyy和一段时间MM/dd/yyyy或MM-dd-yyyyy。我不确定的格式,它可能从上面或其他格式来 还可以使用Pa

获取错误,如:

mscorlib.dll中发生类型为“System.FormatException”的未处理异常。其他信息:字符串未被识别为有效的日期时间

我正在使用以下代码:

string datetime = DateTime.Parse(encrypt[1]);

加密是一个字符串数组

加密[1]
中,我不确定哪种格式将以字符串形式出现。我跟踪了一段时间
dd/MM/yyyyy
和一段时间
MM/dd/yyyy
MM-dd-yyyyy
。我不确定的格式,它可能从上面或其他格式来

还可以使用
ParseExcept
TryParseExcept
。但未获得成功似乎返回相同的错误


请给我一个合适的解决方案。

如果你不知道接下来会发生什么,你几乎无法正确地获取日期格式

以这个样本为例:

01/02/2014
这是一月二日还是二月一日

如果您确实知道这些格式,可以使用
TryParseExact
,然后沿着列表向下走,直到其中一个匹配:

DateTime d;
if (DateTime.TryParseExact(encrypt[1], "dd/MM/yyyy", CultureInfo.InvariantCulture, out d))
{ }
else if (DateTime.TryParseExact(encrypt[1], "yyyy/MM/dd", CultureInfo.InvariantCulture, out d))
{ }

除非日期明显无效,否则无法通过编程区分日期是dd/mm/yyyy还是mm/dd/yyyyy,例如,如果您预期的是dd/mm/yyyy,而您的日期是2014年12月14日,则该格式只能是mm/dd/yyyy

但是,由于您从HTTP请求接收数据(问题用MVC标记),因此您可以找到用户的区域性并使用该区域性来解析日期,例如

DateTime.Parse("13/12/2014", new CultureInfo("en-GB")); // Works fine.

DateTime.Parse("13/12/2014", Thread.CurrentThread.CurrentCulture)
有关更多信息,请参阅。

安德烈亚金申已经是真正的问题。如果他允许我的话,我想加上这个作为回答

默认情况下,
DateTime.Parse
Convert.ToDatetime
方法都使用您的
CurrentCulture
设置

并且您的
CurrentCulture
只能有一种
dd/MM/yyyyy
MM/dd/yyyyy
格式。它不能将两种格式都作为标准的日期和时间格式,因为当您得到一个类似
01/01/2014
的字符串时,它不知道使用哪种格式

没有任何DateTime方法可以解决您的问题。即使使用将格式作为
字符串[]
,它也会使用数组中匹配的第一个成功格式解析字符串

tl;dr


您必须知道数据的格式。

您应该知道用于解析的字符串格式。否则,您将无法区分不同的日期。示例:字符串“01/02/2014”可以解析为2014年2月1日或2014年1月2日。我给你我的想法看:我制作了一个winform应用程序,用于使用datetime创建密钥,然后我将此应用程序交给客户端,客户端说不进行解密,然后我发现其datetime格式问题。所以我们不知道我的客户端将使用哪种格式。您设置了标记asp.net mvc。当客户端从winform应用程序发布数据时,是否将其发布到控制器或api?如果是这样,您可以尝试从请求中获取区域性信息。还有一个机会,如果你能改变winform应用程序集的文化,所有客户端一个。我给你我的想法看:我制作了一个winform应用程序并使用datetime创建密钥,然后我把这个应用程序给了客户端,客户端说不进行解密,然后我发现它的datetime格式问题。因此,我们不知道我的客户端将使用哪种格式。在这种情况下,您需要调整Winforms应用程序中的代码以强制使用固定日期格式。例如,强制Winforms应用程序使用ISO 8601日期格式,这是明确的:DateTime.Now.ToString(“yyyy-MM-dd”)
DateTime.Parse("13/12/2014", new CultureInfo("en-GB")); // Works fine.

DateTime.Parse("13/12/2014", Thread.CurrentThread.CurrentCulture)