将特定字符串转换为数据表行中的日期时间
本文关键字:日期 时间 数据表 字符串 转换 | 更新日期: 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("'"", "")));
现在一切都在工作!