【问题标题】:The string was not recognized as a valid DateTime. There is an unknown word starting at index 0该字符串未被识别为有效的日期时间。有一个从索引 0 开始的未知单词
【发布时间】:2012-05-16 19:24:03
【问题描述】:

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

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

谢谢

【问题讨论】:

  • 您是否尝试过使用 DateTime.Parse,甚至 DateTime.ParseExact?
  • 在 Invariant 区域性中,毫秒的默认分隔符是 .,而不是 :。但请注意使用 parse 方法而不是 Convert.ToDateTime 的建议。

标签: c# datetime


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      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】:

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

        【讨论】:

          【解决方案5】:

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多