2012-05-16 17 views
1

我有下面的C#,当尝试将字符串解析为datetime时,上面给出了我的错误。该字符串未被识别为有效的DateTime。有一个未知的单词从索引0开始

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

如何转换任何想法?

感谢

+3

您是否尝试过使用DateTime.Parse,甚至是DateTime.ParseExact? – zmbq

+3

毫秒的默认分隔符是Invariant文化中的'.',而不是':'。但请注意使用解析方法而不是'Convert.ToDateTime'的建议。 –

回答

2

是 - 使用 “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) 
{ 
    ... 
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); 
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

你的问题是你的dateTime字符串的时间部分。如果你的字符串阅读“2012-04-15 15:23:34.123”,那么它会工作。你可以修改你的字符串,并用句号替换最后一个冒号,这样可以修复它。

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()调用。还没有完成我的回归测试;所以,我不知道这是否是一个错误。

相关问题