我目前正在开发一个.net应用程序,将在多个不同的国家和时区使用。后台数据库为sql server。
我一直在研究datetime、datetime2和datetimeoffset数据类型,我有点困惑。
一些例子可能对我的困惑有所帮助。假设我有一个表,其中包含产品数据以及其可用性的开始和结束日期。因此,对于开始日期和结束日期,数据将保存为utc日期,并包括时区。
如果我查询数据库并希望省略不在开始日期和结束日期之间的记录,并执行如下操作:
select * from products where stardate <= getutcdate() and enddate >= getutcdate;然而,这是无效的,因为utc日期可能不反映在ie中需要数据的国家的时间。不应用时间偏移量。你知道我该怎么解决这个问题吗?
我的下一个问题是,当那个国家的夏令时发生变化时,偏移量会不会不同?即。数据会不会因为偏移量不正确而变得陈旧?
在我的应用程序中向上移动各层,然后进入我的.net代码。当我从数据库检索数据时,我创建了一个包含结束日期/开始日期的DateTimeOffset变量。如果我想写一些类似于我的sql中的代码来检查开始和结束日期,如果我使用DateTime.UtcNow,我不会遇到同样的问题吗?
如果能帮助我解决困惑,那就太好了。
发布于 2012-11-09 10:07:36
Utc日期是时区和夏令时中立的,因此,sql server上的所有计算都应仅以utc时间执行。时区信息(区域设置)存储在本地pc上,并在将date Time类从utc转换为本地utc主题时应用。对于网页,日期作为utc字符串传入,并通过date对象(tolocaltime)转换为本地时间。时间应在发送到sql server之前由网页或应用程序进行转换。
https://stackoverflow.com/questions/13300458
复制相似问题