C# - " String未被识别为有效的DateTime"例外

时间:2016-03-08 10:45:50

标签: c# asp.net asp.net-mvc

我在我的控制器中有这个代码。这个代码在我尝试循环数据集时给出了异常。当我多次运行项目时,在不同的行上给出了异常。(例外情况不会发生在确切的行)

例外是;

  

字符串未被识别为有效的DateTime。

DateTime arrDate = DateTime.Parse(ds.Tables[0].Rows[i]["CheckInDate"].ToString());

我也试过了;

DateTime createdDate = DateTime.ParseExact(ds.Tables[0].Rows[i]["CheckInDate"].ToString(), "MM/dd/yyyy HH:mm", CultureInfo.InvariantCulture);

但它还没有工作..

该行的值为2/9/2016 21:20

4 个答案:

答案 0 :(得分:4)

您只需将其转换为正确的类型,似乎是DateTime,无需解析:

DateTime arrDate = ds.Tables[0].Rows[i].Field<DateTime>("CheckInDate");

如果它实际上是一个字符串(为什么会这样?)使用M/d/yyyy而不是MM/dd/yyyy

DateTime.ParseExact("2/9/2016 21:20", "M/d/yyyy HH:mm", DateTimeFormatInfo.InvariantInfo);

答案 1 :(得分:1)

ParseExact要求您的字符串完全与您要解析的模式匹配。

你的模式有&#34; MM / dd&#34;这需要两位数的月份和日期(&#34; 01/29&#34;或&#34; 10/02&#34;或&#34; 01/02&#34;)但你只需要传递一位数的月份和日子(&#34; 2/9&#34;)。

您需要更改模式以接受单个数字或更改字符串以传递两位数。

答案 2 :(得分:0)

您需要知道检索日期的格式,然后使用正确的格式解析

dataType: 'json'

如果此格式不适用于当前文化(应用程序的语言和区域)

$.parseJSON(result)

OR

DateTime dt=DateTime.ParseExact(ds.Tables[0].Rows[i]["CheckInDate"].ToString(), "dd/MM/yyyy", CultureInfo.InvariantCulture);

有关更多信息,请查看Custom Date and Time Format Strings

答案 3 :(得分:-1)

尝试以下,

If ( ds.Tables[0].Rows[i]["CheckInDate"] != null ) {
// your code goes here...
DateTime arrDate = DateTime.Parse(ds.Tables[0].Rows[i]["CheckInDate"].ToString());
}