2016-11-22 164 views
2

我们有一个名为Record in db的表,其中有一些recods。 它具有以下行的列根据UTC根据用户时区计算时区

Id(uniqueidentifier) 
SubmittedDate(DateTime) 
RecordNumber(uniqueidentifier) 

以下代表记录的一个排,

Id          RecordNumber     SubmittedDate 
'CD458C6D-9F45-41C1-85D8-E3D8287A82B4', 'EBB5DE3A-4B14-4112-AF51-0F8367FE3383' '2016-11-02 08:27:17.300' 

用户可以从任何时区的提交记录。作为最佳实践的一部分,我们以UTC保存DateTime。 因此,根据用户时区,我们将datetime转换为UTC并将其保存到表格中。

现在,我必须返回结果作为用户提交日期的记录数。 我们必须根据用户时区返回记录。

如果用户在上午01:00在22Nov2016提交了10条记录,并且没有提交日期为21Nov2016且用户属于IST时区的记录。 在服务器端,我们正在转换22Nov2016上午01:00到IST,并把它作为21Nov2016下午9点UTC

当同一个用户查询,以获得最近5天的记录上日期11月24日,我们将当前用户时区,即偏移(+5:30)到SubmittedDate列并相应地提取记录。 因此,我们应该得到用户根据用户时区提交的正确数量的记录。 将UTC抵消额添加到SubmittedDate日期后,我将获得正确的记录数,即22Nov2016的日期为10。

当我们在夏令时期间UTC时差发生变化时,即当时区从PST转换为PDT时,此解决方案将不起作用,反之亦然。

要在用户表克服这一点,我们已经添加时区列当用户提交recods

ID(唯一标识符) SubmittedDate(DATETIME) RecordNumber(唯一标识符) SubmittedTimeZone(VARCHAR)

所以, a)当用户查询来自夏时制的时区的记录时,如果夏令时已经提交,提交的记录也会提交,我们没有做任何抵消。

b)当用户查询夏令时时区的记录时,如果在夏令时中提交了提交的记录,那么我们将增加1小时来抵消。

c)当用户从夏时制关闭的时区查询记录,并且在有夏令时提交提交的记录时,我们正在增加-1小时来抵消。

d)当用户查询夏令时关闭的时区记录以及提交的记录也在夏令时关闭时提交,我们没有做任何抵消。

这是处理不同时区的时区/夏时制的正确方法吗?

注:我们正在确定提交记录时有夏令分别由列SubmittedTimeZone值有最后两个词作为“夏季时间” 像“阿拉斯加夏令时”,“东部夏令时”也提交

这里可能夏令时一次开启时区在另一个时区关闭。可能我们必须根据提交日期和提交的时区列来计算请求用户时区的偏移量。

回答

0

在这种情况下,我们不能将偏移量添加到提交的日期时间作为偏移将随着夏时制的影响而改变。

所以,用户提交记录时的偏移量和他查询提交记录数量时可能会有所不同。这将导致不正确的记录数。

解决方法是获取请求用户的时区,并将每个记录的submittedDatetime值转换为请求用户时区,然后根据日期计算提交的记录数。

备注:For conversion of DateTime into particular datetime