根据用户时区

时间:2016-11-22 14:56:13

标签: c# sql datetime timezone timezone-offset

我们在db中有一个名为Record的表,它有一些recods。 它有以下列

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 AM转换为IST并将其存储为21Nov2016 09:00 PM UTC

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

当我们在夏令时期间更改UTC偏移时,即当时区从PST转换为PDT时,此解决方案将无效,反之亦然。

为了解决这个问题,我们在用户提交了recods时在用户表中添加了时区列

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

所以,a)当用户从夏令时开始的时区查询记录并且提交记录时,如果有夏令时,我们也会提交记录,我们没有做任何事情来抵消。

b)当用户从夏令时开启的时区查询记录并且提交记录时,如果夏令时被取消,那么我们将增加1小时的抵消。

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

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

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

注意:我们正在识别提交的记录也是在按照列进行夏令时时提交的.SubmittedTimeZone值最后两个单词为'DAYLIGHT TIME' 比如'ALASKA DAYLIGHT TIME','EASTERN DAYLIGHT TIME'

在一个时区中,夏令时可能会在另一个时区关闭。可能我们必须根据提交的日期和提交的时区列计算请求用户时区的偏移量。

1 个答案:

答案 0 :(得分:0)

在这种情况下,我们无法向Submitted datetime添加偏移量,因为偏移量会随着夏令时的影响而变化。

因此,用户提交记录时的偏移量以及查询提交的记录数量时的偏移量可能不同。这将导致记录数量不正确。

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

注意:For conversion of DateTime into particular datetime