收到错误:字符串在 c# 中未被识别为有效的日期时间

本文关键字:识别 有效 时间 日期 错误 字符串 | 更新日期: 2023-09-27 18:31:18

得到错误,如:

mscorlib 中发生了类型为"System.FormatException"的未处理异常.dll 其他信息:字符串未被识别为有效的日期时间。

我正在使用此代码:

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

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

加密是一个字符串数组

encrypt[1]not sure which format will come in string。 我有一段时间dd/MM/yyyy,有时MM/dd/yyyyMM-dd-yyyydd-MM-yyyy。我不确定它可能来自上面的格式或其他格式。

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

请给我适当的解决方案。

收到错误:字符串在 c# 中未被识别为有效的日期时间

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

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

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

没有一个日期时间方法可以解决您的问题。即使您使用将格式作为string[] DateTime.TryParseExact重载,它也会使用数组中匹配的第一个成功格式解析您的字符串。

博士

您必须知道数据具有哪种格式。

如果您不完全知道会发生什么,那么您几乎没有正确获取日期格式的更改

以此示例为例:

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。