繁体   English   中英

收到错误:在C#中,字符串未被识别为有效的DateTime

[英]Getting error : String was not recognized as a valid DateTime in c#

出现类似的错误:

mscorlib.dll中发生了'System.FormatException'类型的未处理异常。其他信息:无法将字符串识别为有效的DateTime。

我正在使用此代码:

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

要么

string datetime = Convert.ToDatetime(encrypt[1]);

加密是一个字符串数组

encrypt[1]not sure which format will come in string 我有一段时间来跟踪dd/MM/yyyyMM/dd/yyyyMM-dd-yyyydd-MM-yyyy 我不确定它是从上面格式化的,还是其他格式来了。

也可以使用ParseExceptTryParseExcept 但没有成功似乎返回相同的错误

请给我适当的解决方案。

AndreyAkinshin已经解释了真正的问题。 如果他允许我将其添加为答案。

默认情况下, DateTime.ParseConvert.ToDatetime方法都使用CurrentCulture设置。

并且您的CurrentCulture 只能采用dd/MM/yyyyMM/dd/yyyy格式之一。 它不能同时使用两种格式作为标准的日期和时间格式,因为当您获得01/01/2014类的字符串时,它知道使用哪种格式。

DateTime方法无法解决您的问题。 即使您使用DateTime.TryParseExact重载 (将格式作为string[] ,它也会使用与数组中匹配的第一个成功格式来解析您的字符串。

tl; dr

必须知道数据的格式。

如果您不完全知道要输入的内容,那么正确地获取日期格式几乎没有任何改变

拿这个样本:

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并且得到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)

有关更多信息,请参见http://msdn.microsoft.com/zh-cn/library/bb882561(v=vs.110).aspx

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM