我有以下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
有关如何转换此内容的任何想法?
由于
答案 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
。
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()调用。但是还没有完成我的回归测试;所以,我不知道这是不是一个错误。