2012-11-09 56 views
0

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

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

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

如果我查询数据库,并希望省略尚未开始和日期和结束日期之间会做一些这样的记录:

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

然而,这不是一样的UTC日期有效可能没有反映在该国需要数据的时间。时间偏移不适用。那么,我有什么想法可以解决这个问题?

下一个问题我周围有这个是当该国家的日光时间变化时,偏移量不会不同吗?即。数据将变得陈旧,因为偏移值将不正确。

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

任何帮助,以协助我的困惑将是伟大的。

+0

如果这是产品可用性的开始日期和结束日期是* time *实际相关的,还是只需要存储可用性开始/结束的日期? –

+0

是的,它是基于时区的。所以虽然它可能在国内可用,但在几个小时内可能不会在另一个地方。 – amateur

回答

1

Utc日期是时区和夏时制中性,因此在sql server上的所有计算应该只在utc时间执行。时区信息(区域设置)存储在本地电脑上,适用于从utc转换到本地电台日期时间分类时。对于网页,日期以utc字符串的形式传入并转换为本地时间 通过日期对象(tolocaltime)时间应在网页或应用程序被转换为sql server之前进行转换