将特定字符串转换为数据表行中的日期时间

本文关键字:日期 时间 数据表 字符串 转换 | 更新日期: 2023-09-27 18:34:32

我正在尝试将特定的字符串转换为包含在数据表中的日期时间。但由于某种原因不太有效。我尝试了几种组合。问题是字符串实际上包含日期周围的" "。

所以数据表中包含值(包括双引号(的单元格"2014-08-08 08:00:00">

我的代码遍历了所有这些,并尝试将其转换为 DateTime(需要它作为对 SQL Server 执行 bulkCopy.WriteToServer(datatable( 的操作。

  //Fix up default values and remove double quotes from field in order to convert to date
  if(dt.Rows.Count > 0)
  {
      for (int i = 0; i < dt.Rows.Count; i++)
      {
          dt.Rows[i]["usagestartdate"] = 
              dt.Rows[i]["usagestartdate"].ToString() == "" ?
              DateTime.Now.AddYears(-2014) : 
              Convert.ToDateTime((dt.Rows[i]["invoiceid"].ToString().Replace("'", "")));
          dt.Rows[i]["usagestartdate"] = 
              dt.Rows[i]["usageend"].ToString() == "" ? 
              DateTime.Now.AddYears(-2014) : 
              Convert.ToDateTime(dt.Rows[i]["usageend"].ToString());
      }
  }

我在循环内的第一行收到错误。

字符串未被识别为有效的日期时间。

任何想法如何使演员正常工作?

将特定字符串转换为数据表行中的日期时间

您正在混合单引号( ' ( 和双引号( " (。

这就是为什么当你写Replace("'", "")部分时,它不会用任何东西替换,因为你的字符串没有任何单引号。这就是一个解决方案可能会在代码中从Replace("'", "")更改为Replace("'"", "")的原因。

但这里有另一种方式

由于您使用的是重载Convert.ToDateTime(string)因此此方法默认使用您的CurrentCulture设置。并且没有一种文化具有标准的日期和时间格式,双引号字符串作为"yyyy-MM-dd HH:mm:ss"。这就是为什么您需要使用自定义日期和时间解析DateTime.TryParseExact例如方法;

string s = "'"2014-08-08 08:00:00'"";
string format = "'''"yyyy-MM-dd HH:mm:ss'''"";
DateTime date;
if(DateTime.TryParseExact(s, format, CultureInfo.InvariantCulture,
                          DateTimeStyles.None, out date))
{
    Console.WriteLine (date);
}

这里有一个demonstration.

你应该使用

DateTime.ParseExact(dtRows[i], "yyyy/MM/DD HH:mm:ss", CultureInfo.InvariantCulture);

刚刚意识到我做了一个 Ctrl + Z,但仍然没有覆盖双引号,只是单引号。替换为

dt.Rows[i]["usagestartdate"] = dt.Rows[i]["usagestartdate"].ToString() == "" ? 
                               DateTime.Now.AddYears(-2014) : 
                               Convert.ToDateTime((dt.Rows[i]["usagestartdate"].ToString().Replace("'"", "")));

现在一切都在工作!