SQL数据库,日期类型和时区(ADO.NET)

时间:2013-04-12 13:27:57

标签: datetime ado.net

我们遇到的问题是,制作选择查询的程序在一个时区,数据库在另一个时区,而日期比较包括额外的一天。我猜这是因为说@date< '2013-01-04'其中@date被设置为英国的参数,但是对于美国的数据库,由于时区差异,时间偏移部分将其移动到第二天。

数据库中的DateTime基本上是整数(或长整数)。那么,当数据库的日期列值为2013-01-04T00:00:00时,这如何与ADO.NET一起使用 - 是存储为UTC DateTime,本地DateTime(当地恰好是当地的偏移量) ,还是特定的偏移?

当我使用DateTime(Kind == Local)设置该参数时,该如何翻译?

谢谢 - 戴夫

2 个答案:

答案 0 :(得分:0)

取决于数据库。但是说,所有数据库都将日期时间存储为一个整数(如dot Net或javascript),这当然是不正确的。您没有在问题中指定您正在使用的数据库产品,但SQL Server例如使用 两个 整数:

SQL Server的datetime和smalldatetime值的内部表示是一个两部分值,第一部分是表示自1900年1月1日以来的天数的整数,第二部分是表示一天的小数部分的小数部分(当时)---所以整数值0(零)总是直接翻译成1900年1月1日的午夜。

第二部分,时间部分在内部也是一个整数,表示自午夜以来的时钟周期数。见this。时钟刻度是1/300秒,大约3.333毫秒。

答案 1 :(得分:0)

如果存储.NET DateTime,它在数据库中的值始终与.ToString()

相同

它不会指定时区。

我建议您在将所有日期时间存储到数据库之前使用.ToUniversalTime(),并在阅读时假设所有日期都是UTC。