C# 获取错误:字符串在c中未被识别为有效的日期时间#
获取错误,如: mscorlib.dll中发生类型为“System.FormatException”的未处理异常。其他信息:字符串未被识别为有效的日期时间 我正在使用以下代码: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
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)