1

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

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

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

谢谢 - 戴夫

4

2 回答 2

0

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

SQL Server 对 datetime 和 smalldatetime 值的内部表示是一个由两部分组成的值,其中第一部分是一个整数,表示自 1900 年 1 月 1 日以来的天数,第二部分是一个小数部分,表示一天的小数部分(对于time) --- 所以整数值 0(零)总是直接转换为 1900 年 1 月 1 日午夜的早晨。

第二部分,时间部分在内部也是一个整数,表示自午夜以来的时钟滴答数。看到这个。时钟滴答是 1/300 秒,大约 3.333 毫秒。

于 2013-04-12T13:44:32.630 回答
0

如果您存储一个 .NET DateTime ,它将在数据库中始终具有与 .ToString() 相同的值

它不会指定时区。

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

于 2013-11-08T18:32:16.597 回答