我的情况是我们将数据存储在一个SQL Server数据库中,支持2005就上去了。存储 DateTime 值时,它是客户端的本地时间。我需要能够在任何地方的任何其他客户端上获取该日期,而不考虑其他客户端可能位于的任何时区。
例如,当纽约的用户输入“2012-12-20 00:00”的 DateTime 值时,我希望加利福尼亚的用户看到相同的 DateTime 值。这些 DateTime 值不应该尊重时区的差异,但这就是我看到的情况。目前,SQL Server 会将 DateTime 作为“2012-12-19 21:00”交付给加利福尼亚用户。请注意由于从 EST 更改为 PST 导致的 -3 小时回滚,现在是前一天(出于本次对话的目的,请忘记 DST 问题)。
我需要完成的是逐字获取这些数据,而不是按时区翻译。那么你能提供什么建议呢?
需要考虑的一些代码:
这是表格:
CREATE TABLE [dbo].[tblMeterReadings](
[fldMeterReadingsID] [int] IDENTITY(1,1) NOT NULL,
[fldMeterID] [int] NOT NULL,
[fldUser] [varchar](50) NULL,
[fldBy] [varchar](50) NULL,
[fldDateOfReading] [datetime] NULL,
[fldReading] [float] NULL,
[fldIsArchived] [bit] NULL DEFAULT ((0)),
我们有一个 Sql 类来完成这项工作,在下面的示例中,“sql”是该类的一个对象。使用参数化查询进行调用,其中@data0 是要存储在 SQL DateTime 字段中的 DateTime 对象:
sql.Execute(@"INSERT INTO tblMeterReadings (fldMeterID, fldDateOfReading) VALUES (" + MeterID + ", @data0)", Date);
最终,这会设置一个 SqlCommand,分配参数,并触发一个 command.ExecuteNonQuery() 调用。
现在,要检索日期,我只需将其选择到 DataTable 中(同样,使用我们的 Sql 类助手):
DataTable myTable = sql.readDataTable(@"SELECT fldMeterID, fldDateOfReading FROM tblMeterReadings");
所以我看到的是,在数据库本身中,日期是“2012-12-20 00:00”,正如我所料,但是当我在调试中检查 myTable 内容时,我看到该表中的日期是“2012- 12-19 21:00”。
该数据库是在运行在 EST 状态的机器上的 SQL Server 上创建的。但是,我的机器设置为 PST。因此,在 SELECT 中将 DateTime 值传递给我的方式有所不同。
我错过了什么?