【问题标题】:Inserting ISO date in sql server在sql server中插入ISO日期
【发布时间】:2017-11-13 04:30:24
【问题描述】:

当我在 c# 中运行以下代码时

string dt = "2017-07-09T17:50:21.000-0500"; 
string date = DateTimeOffset.Parse(dt).DateTime.ToString("yyyy-MM-dd HH:mm");

它把这个作为输出

2017-07-09 17:50

但是在将其插入数据库时​​,它会增加 +5 小时的时间并插入为

2017-07-09 22:50

有人可以帮我将相同的日期(2017-07-09 17:50)插入数据库


更新 1

这是我完整的简化代码

DataSet dSet = new DataSet();
DataTable dTable = new DataTable();
dTable.Columns.Add("created_on", typeof(DateTime));

foreach (var item in items)
{
DataRow dRow = dTable.NewRow();
dRow["created_on"] = DateTimeOffset.Parse(item.createdon).DateTime;
//-- in item.createdon i get the date like this "2017-07-09T17:50:21.000-0500";
dSet.Tables[0].Rows.Add(dRow);
}

完成循环后,通过存储过程将数据以xml的形式发送到数据库进行插入。

在数据库中插入后,该行将更新为以下日期

2017-07-09 22:50

【问题讨论】:

  • 因为您可能将其插入到具有datetime 列而不是字符串的表中,请显示相关代码。最好的选择是一些时区转换问题,但很难用这么少的信息来判断。
  • 寻求调试帮助的问题(“为什么这段代码不起作用?”)必须包括所需的行为、特定的问题或错误以及在问题本身中重现它所需的最短代码。没有明确问题陈述的问题对其他读者没有用处。请参阅:如何创建最小、完整和可验证的示例。
  • 您能告诉我们服务器所在的时区与您所在的时区吗?您要插入的列的数据类型是什么?
  • 可以发一下你的sql代码吗?
  • “通过存储过程作为 xml” > 这将是有趣的部分。到目前为止,您给出的代码无法重现问题,DateTimeOffset.Parse 的文档指定部件之间应该有一个空格,但它仍然适用于您的示例数据,最终以 dSet 为 2017-07- 09 17:50:21.000

标签: c# sql-server date datetime


【解决方案1】:

@dlatikay!根据您的第一条评论,我将数据类型从 DateTime 更改为 string 并且它有效。

dTable.Columns.Add("created_on", typeof(string));

当数据类型为 DateTime 时,结果如期而至,但在插入到 sql 时,值正在发生变化。现在,当我将值作为字符串发送到 sql 时,它正在将该字符串转换为 DateTime 并且它起作用了。

感谢大家的回复。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-09
    • 2012-04-29
    相关资源
    最近更新 更多