【问题标题】:DateTime values read wrongly from DatabaseDateTime 值从数据库中读取错误
【发布时间】:2014-08-22 13:33:48
【问题描述】:

我的数据存储在 GMT + 2 的国家/地区的 SQL Server 上。例如,DateTime 值类似于 1/1/1800 12:00:00 AM。

现在,我有一个 C# 控制台应用程序,它在英国的服务器上运行。 C# 正在从远程数据库中读取这些值。但是,收到的日期少了 2 小时,例如:31/12/1799 22:00:00。

我将文化更改为 en-US,唯一改变的是 10:00:00 PM 而不是 22:00:00 的打印

知道为什么日期值被“自动转换”为语言环境时区,而不是保持原样吗?

谢谢 问候

【问题讨论】:

  • 它是否从该英国服务器读取(或在设置时读取)任何区域设置或位置设置?例如时区。
  • 你如何将值传递给数据库?通过一些变量(SP 参数等)或使用 GetDate() 函数?
  • @TheVillageIdiot GetDate()

标签: sql sql-server-2008 c#-4.0


【解决方案1】:

您遇到的问题与您计算机上的文化无关,它与时区转换有关。

初始化连接时 - 您和服务器之间发生协商,告诉服务器您所在位置的时区,并自动为您进行通信转换。

首先,尝试了解 DBMS 中存储了什么,以及您希望它存储什么。

也许您需要将 DateTime 类型更改为考虑时区的类型:例如:http://blogs.msdn.com/b/sqlprogrammability/archive/2008/03/18/using-time-zone-data-in-sql-server-2008.aspx

如果您不想进行时区“调整”,请尝试将 DBMS 会话同步到同一时区(在您的客户端和 SQL Server 之间) - 这样就不会发生转换。

【讨论】:

    【解决方案2】:

    这里有两件事你不应该混淆:(1)数据是如何存储在数据库中的; (2)如何显示。数据库应该以与时区无关的方式存储信息;如何显示它取决于您。

    这意味着有两件事可能会出错。要么是存储错误,因为将内容放入数据库的应用程序没有正确解释它要存储的日期/时间,或者更有可能是在显示它时转换为本地时间。

    我不确定您是如何进行转换的,但如果您不指定,许多日期/时间函数将使用默认语言环境。但是,如果您愿意,它们将允许您指定语言环境。

    如果我是你,我会查看数据库中的原始数据,看看是否正确。

    【讨论】:

      猜你喜欢
      • 2019-09-24
      • 1970-01-01
      • 1970-01-01
      • 2011-03-09
      • 2010-11-30
      • 1970-01-01
      • 1970-01-01
      • 2012-12-25
      • 2014-12-10
      相关资源
      最近更新 更多