DateTime值从数据库读取错误

时间:2014-08-22 13:33:49

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

我将数据存储在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的打印

知道为什么将日期值“自动转换”为区域设置时区而不是将值保持为原样?

谢谢 此致

2 个答案:

答案 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之间) - 因此不会发生任何转换。

答案 1 :(得分:0)

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

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

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

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