我目前正在开发一个.NET应用程序,该应用程序将用于多个不同的国家和时区。后端数据库是SQL Server。
我一直在寻找DateTime,DateTime2和DateTimeOffset数据类型,我有些困惑。
一些例子可能有助于我的困惑。可以说,我有一张具有产品数据的表格,其可用性具有起始日期和结束日期。因此,对于开始日期和结束日期,数据被保存为UTC日期,并包括时区。
如果我查询数据库,并且想省略在开始和结束日期之间不在的记录,并且会执行以下操作:
select * from products where stardate <= getutcdate() and enddate >= getutcdate;
这是无效的,因为UTC日期可能无法反映该国需要的数据。时间偏移不应用。所以有什么想法我如何解决这个问题?
下一个问题,我遇到的是那个国家的白天时间变化时,偏移不会有所不同?IE。由于偏移值不正确,数据会变成陈旧。
将应用程序中的层移动到我的.NET代码中。当我从数据库中检索数据时,我创建一个包含EndDate/StartDate的DatementementOffset变量。如果我想编写与SQL中类似的代码以检查开始和终点,如果我用户dateTime.utcnow?
,我不会遇到相同的问题?任何帮助我的混乱的帮助都会很棒。
UTC日期是时区和日光节省时间中性,因此,对于SQL Server上的所有计算都应仅在UTC时间内执行。时区信息(LOCALE)存储在本地PC上,并在从UTC转换为日期时间类别时应用。对于网页,日期作为UTC字符串传递并转换为本地时间通过日期对象(TOLOCALTIME)时间应通过网页或应用程序进行转换,然后发送到SQL Server