0

我目前正在开发一个将在多个不同国家和时区使用的 .net 应用程序。后端数据库是sql server。

我一直在研究 datetime、datetime2 和 datetimeoffset 数据类型,我有点困惑。

一些例子可能有助于我的困惑。假设我有一个表,其中包含产品数据以及其可用性的开始和结束日期。因此,对于开始日期和结束日期,数据将保存为 utc 日期并包括时区。

如果我查询数据库并想省略不在开始日期和结束日期之间的记录,并且会执行以下操作:

select * from products where stardate <= getutcdate() and enddate >= getutcdate;

但是,这是无效的,因为 UTC 日期可能无法反映需要数据的国家/地区的时间,即。不应用时间偏移。那么有什么想法可以解决这个问题吗?

我的下一个问题是,当该国家/地区的日光时间发生变化时,偏移量不会有所不同吗?IE。由于偏移值不正确,数据是否会变得陈旧。

在我的应用程序中向上移动层,并进入我的 .net 代码。当我从数据库中检索数据时,我创建了一个包含结束日期/开始日期的 DateTimeOffset 变量。如果我想在我的 sql 中编写一些类似的代码来检查开始和结束日期,如果我使用 DateTime.UtcNow,我会不会遇到同样的问题?

任何有助于解决我的困惑的帮助都会很棒。

4

1 回答 1

1

UTC 日期是时区和夏令时中性的,因此在 sql server 上的所有计算都应仅在 UTC 时间中执行。时区信息(区域设置)存储在本地 pc 上,并在从 utc 转换为本地时应用日期时间类。对于网页,日期作为 utc 字符串传入并转换为本地时间通过日期对象 (tolocaltime) 时间应在发送到 sql server 之前由网页或应用程序转换

于 2012-11-09T02:07:35.587 回答