该字符串未被识别为有效的日期时间.有一个从索引 0 开始的未知单词

本文关键字:有一个 索引 单词 未知 开始 时间 日期 字符串 识别 有效 | 更新日期: 2023-09-27 18:34:28

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

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

谢谢

该字符串未被识别为有效的日期时间.有一个从索引 0 开始的未知单词

是 - 将"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-04-15 15:23:34.123",那么它将起作用。您可以修改字符串并将最后一个冒号替换为句点,这将修复它。

你的代码看起来是正确的;问题可能出在你的字符串格式上,它的最后一:实际上应该是一个.(指示秒的小数部分的开始(。

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

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

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

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

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