0

出现错误,如:

mscorlib.dll 中出现“System.FormatException”类型的未处理异常附加信息:字符串未被识别为有效的 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。但没有成功似乎返回相同的错误

请给我适当的解决方案。

4

3 回答 3

6

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

和方法默认使用您的DateTime.Parse设置。Convert.ToDatetimeCurrentCulture

并且您CurrentCulture只能具有其中一种dd/MM/yyyyMM/dd/yyyy格式。它不能将两种格式都作为标准的日期和时间格式,因为当得到一个像01/01/2014.

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

tl;博士

必须知道数据的格式。

于 2014-11-21T13:04:48.973 回答
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))
{ }
于 2014-11-21T12:58:54.900 回答
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

于 2014-11-21T13:00:09.857 回答