该字符串未被识别为有效的DateTime。 从索引0开始有一个未知单词

我有以下C#在尝试将字符串解析为datetime时给出了上述错误。

DateTime backupdate = System.Convert.ToDateTime(imageflowlabel.Text); DateTime currentdate = System.DateTime.Now.AddHours(-2); int result = currentdate.CompareTo(backupdate); 

imageflowlable.text看起来像这样2012-04-15 15:23:34:123

关于如何转换这个的任何想法?

谢谢

是 – 将“DateTime.ParseExact()”或“TryParseExact()”与自定义格式字符串一起使用:

http://msdn.microsoft.com/en-us/library/8kb3ddd4.aspx

 DateTime currentdate; int result; try { // EXAMPLE: 2012-04-15 15:23:34:123 DateTime backupdate = DateTime.ParseExact ( "yyyy-MM-dd HH:mm:ss:fff", //mind the casing imageflowlabel.Text, CultureInfo.InvariantCulture); currentdate = System.DateTime.Now.AddHours(-2); result = currentdate.CompareTo(backupdate); } catch (Exception ex) { ... 

您的问题在于dateTime字符串的时间部分。 如果您的字符串显示为“2012-04-15 15:23:34.123”,那么它会起作用。 您可以修改您的字符串并用句点替换最后一个冒号,这将修复它。

ParseExact应该适合你,假设你的用户无法自己编辑这个值; 在这种情况下,除非您需要FormatException ,否则应使用TryParseExact 。

 var toParse = "2012-04-15 15:23:34:123"; var parsed = DateTime.ParseExact(toParse, "yyyy-MM-dd HH:mm:ss:fff", null); Assert.AreEqual(new DateTime(2012, 4, 15, 15, 23, 34, 123), parsed); 

你的代码看起来正确; 问题可能是你的字符串格式,其最后一个:实际应该是一个. (表示小数秒的开始)。

 Incorrect: 2012-04-15 15:23:34:123 Correct: 2012-04-15 15:23:34.123 

Convert.ToDateTime("2012-04-15 15:23:34.123")工作正常。

我已经看到几个答案来解决这个问题中概述的情况,例如使用DateTime.Parse,DateTime.ParseExact或Convert.ToDateTime。 我试图确定为什么问题似乎不一致。 我使用带有SQL Server 2008 R2后端的Microsoft企业库软件工厂构建了一个应用程序,它现在已经生产了大约9个月。 它至少有20个具有相同代码格式的实例,它们将C#的DateTime属性值分配给存储过程的System.Data.DBType.DateTime参数。 20个代码块中的19个工作正常。 对于20日,我必须添加.ToString()调用,如下所示,以解决此问题中提到的错误。

 db.AddInParameter(command, "beginDT", DbType.DateTime, timeBlock.BeginDT.ToString()); 

所以任何人都有一些见解,为什么它会在19个绝对相同的实例中工作,而不是在20? 我只是想更多地了解这些对象的相互关系,以便我可以构建可靠的代码。 我已经回到所有其他实例并添加了.ToString()调用。 但是还没有完成我的回归测试; 所以,我不知道这是不是一个错误。