我的情况是我们将数据存储在SQL Server数据库中,支持2005年.存储DateTime值时,它位于客户端的本地时间.我需要能够在任何地方的任何其他客户端上获取该日期,而不考虑其他客户端可能处于的任何时区.因此,例如,当纽约的...
我的情况是我们将数据存储在SQL Server数据库中,支持2005年.存储DateTime值时,它位于客户端的本地时间.我需要能够在任何地方的任何其他客户端上获取该日期,而不考虑其他客户端可能处于的任何时区.
因此,例如,当纽约的用户输入DateTime值“2012-12-20 00:00”时,我希望加利福尼亚的用户看到相同的DateTime值.这些DateTime值不应该尊重时区的差异,但这就是我看到的情况.目前,SQL Server将该DateTime作为“2012-12-19 21:00”提供给California用户.请注意,由于从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值传递给我.
我错过了什么?
解决方法:
将UTC日期存储在数据库中.只在客户端显示时将其转换为本地时间.
服务器端,使用getutcdate()而不是getdate().
本文标题为:c# – 如何从SQL Server中获取DateTime数据而忽略时区问题?
基础教程推荐
- C#创建Windows服务的实现方法 2023-01-17
- C#中Task.ContinueWith连续任务使用实例 2023-05-22
- C#表达式中的动态查询详解【译】 2023-03-28
- C#温故而知新系列教程之闭包 2022-12-11
- C#使用OpenCv图像批处理并改变图片大小并且重命名 2023-02-08
- C#监测IPv4v6网速及流量的实例代码 2023-03-04
- C# TSC打印二维码和条形码的实现方法 2022-12-02
- C#控件Picturebox实现鼠标拖拽功能 2022-12-31
- Unity游戏开发之射击小游戏的实现 2023-05-26
- C#开发WPF程序中的弱事件模式 2023-06-15