获取错误:字符串未被识别为c#中的有效DateTime

时间:2014-11-21 12:53:00

标签: c# string datetime datetime-parsing

得到如下错误:

  

未处理的类型' System.FormatException'发生在mscorlib.dll中附加信息:字符串未被识别为有效的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/yyyyMM-dd-yyyydd-MM-yyyy。我不确定它可能来自上面或其他格式。

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

请给我适当的解决方案。

3 个答案:

答案 0 :(得分:5)

AndreyAkinshin已经explained真正的问题了。如果他允许我,我想补充一下这个答案。

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

您的CurrentCulture只能 <{1}}或dd/MM/yyyy格式之一。它不能将这两种格式作为标准日期和时间格式,因为无法知道在获得MM/dd/yyyy之类的字符串时使用的格式。

没有DateTime方法可以解决您的问题。即使您使用格式为01/01/2014的{​​{3}},它也会使用您的数组中匹配的第一个成功格式解析您的字符串。

<强> TL;博士

必须知道您的数据格式。

答案 1 :(得分:1)

如果您不确切知道发生了什么,那么几乎没有更改正确的日期格式。

拿这个样本:

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))
{ }

答案 2 :(得分:0)

你不能以编程方式告诉日期是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