获取错误:字符串未被识别为c#中的有效DateTime
得到如下错误:
mscorlib.dll中发生未处理的“System.FormatException”类型exception附加信息:String未被识别为有效的DateTime。
我正在使用此代码:
string datetime = DateTime.Parse(encrypt[1]);
要么
string datetime = Convert.ToDatetime(encrypt[1]);
encrypt是一个字符串数组
在encrypt[1]
我not sure which format will come in string
。 我有一些时间来dd/MM/yyyy
,有时MM/dd/yyyy
或MM-dd-yyyy
或dd-MM-yyyy
。 我不确定它可能来自上面或其他格式来。
也使用ParseExcept
和TryParseExcept
。 但是没有成功似乎返回相同的错误
请给我适当的解决方案。
AndreyAkinshin已经解释了真正的问题。 如果他允许我,我想补充一下这个答案。
默认情况下, DateTime.Parse
和Convert.ToDatetime
方法都使用CurrentCulture
设置。
而您的CurrentCulture
只能有dd/MM/yyyy
或MM/dd/yyyy
格式中的一种。 它不能将这两种格式都作为标准日期和时间格式,因为当您获得类似01/01/2014
的字符串时,它无法知道它使用的格式。
没有DateTime方法可以解决您的问题。 即使您使用将格式作为string[]
DateTime.TryParseExact
重载 ,它也会使用在您的数组中匹配的第一个成功格式来解析您的字符串。
TL;博士
您必须知道数据的格式。
如果您不确切知道将要发生什么,那么您几乎无需更改正确的日期格式 。
拿这个样本:
01/02/2014
这是1月2日还是2月1日?
如果您确实知道格式,可以使用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 / yyyy,除非它们显然是无效的,例如,如果你期望dd / mm / yyyy并且你得到12/14/2014,那么那个格式只能是mm / dd / yyyy。
但是,由于您从HTTP请求接收数据(问题标记为MVC),您可以找到用户的文化并使用它来解析日期,例如
DateTime.Parse("13/12/2014", new CultureInfo("en-GB")); // Works fine. DateTime.Parse("13/12/2014", Thread.CurrentThread.CurrentCulture)
有关详细信息,请参阅http://msdn.microsoft.com/en-us/library/bb882561(v=vs.110).aspx 。