DateTimeOffset和TimeZones周围的混淆

时间:2012-11-09 00:44:40

标签: c# sql datetime timezone datetimeoffset

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

我一直在查看datetime,datetime2和datetimeoffset数据类型,我有点困惑。

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

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

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

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

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

在我的应用程序中向上移动图层,然后移到我的.net代码中。当我从数据库中检索数据时,我创建一个包含enddate / startdate的DateTimeOffset变量。如果我想编写一些类似于我的sql中的代码来检查start和enddate,如果我使用DateTime.UtcNow,我是否会遇到同样的问题?

任何帮助我混淆的帮助都会很棒。

1 个答案:

答案 0 :(得分:1)

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