我目前正在开发一个将在多个不同国家和时区使用的 .net 应用程序。后端数据库是sql server。
我一直在研究 datetime、datetime2 和 datetimeoffset 数据类型,我有点困惑。
一些例子可能有助于我的困惑。假设我有一个表,其中包含产品数据以及其可用性的开始和结束日期。因此,对于开始日期和结束日期,数据将保存为 utc 日期并包括时区。
如果我查询数据库并想省略不在开始日期和结束日期之间的记录,并且会执行以下操作:
select * from products where stardate <= getutcdate() and enddate >= getutcdate;
但是,这是无效的,因为 UTC 日期可能无法反映需要数据的国家/地区的时间,即。不应用时间偏移。那么有什么想法可以解决这个问题吗?
我的下一个问题是,当该国家/地区的日光时间发生变化时,偏移量不会有所不同吗?IE。由于偏移值不正确,数据是否会变得陈旧。
在我的应用程序中向上移动层,并进入我的 .net 代码。当我从数据库中检索数据时,我创建了一个包含结束日期/开始日期的 DateTimeOffset 变量。如果我想在我的 sql 中编写一些类似的代码来检查开始和结束日期,如果我使用 DateTime.UtcNow,我会不会遇到同样的问题?
任何有助于解决我的困惑的帮助都会很棒。