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

时间:2012-05-16 19:24:04

标签: c# datetime

我有以下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

有关如何转换此内容的任何想法?

由于

5 个答案:

答案 0 :(得分:4)

是 - 将“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)
{
  ...

答案 1 :(得分:4)

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

答案 2 :(得分:0)

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);

答案 3 :(得分:0)

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

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")效果很好。

答案 4 :(得分:0)

我已经看到几个答案来解决此问题中概述的情况,例如使用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()调用。但是还没有完成我的回归测试;所以,我不知道这是不是一个错误。