5

我有以下 C# 在尝试将字符串解析为日期时间时给我上面的错误。

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

关于如何转换它的任何想法?

谢谢

4

5 回答 5

6

是 - 使用带有自定义格式字符串的“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)
{
  ...
于 2012-05-16T19:26:49.433 回答
4

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

于 2012-05-16T19:33:58.513 回答
1

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

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")工作正常。

于 2012-05-16T19:33:20.230 回答
0

ParseExact应该适合您,假设您的用户无法自行编辑该值;在这种情况下,您应该使用TryParseExact,除非您想要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);
于 2012-05-16T19:33:04.153 回答
0

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

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

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

于 2012-06-13T06:12:33.690 回答