C# 根据用户时区根据UTC计算时区变化
我们在数据库中有一个名为Record的表,它有一些记录。 它有以下几列C# 根据用户时区根据UTC计算时区变化,c#,sql,datetime,timezone,timezone-offset,C#,Sql,Datetime,Timezone,Timezone Offset,我们在数据库中有一个名为Record的表,它有一些记录。 它有以下几列 Id(uniqueidentifier) SubmittedDate(DateTime) RecordNumber(uniqueidentifier) 下一行表示一行记录 Id RecordNumber SubmittedDate 'CD458C6D-9F45-41C1-85D8-E3D8287A82B4'
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转换为UTC并将其保存到表中
现在,我必须以用户按日期提交的记录数返回结果。
我们必须按用户时区返回记录
如果用户在2016年11月22日凌晨1:00提交了10条记录,而在2016年11月21日没有提交任何记录,并且用户属于IST时区。
在服务器端,我们将2016年11月22日01:00AM转换为IST,并将其存储为2016年11月21日09:00PM UTC
当同一用户查询11月24日最后5天的记录时,我们将当前用户时区的偏移量(即+5:30)添加到SubmittedDate列,并相应地获取记录。
因此,我们应该根据用户时区获得用户提交的正确数量的记录。
将UTC偏移量添加到提交日期后,我将获得正确的记录数,即2016年11月22日的记录数为10
当夏令时UTC偏移量发生变化时(即时区从PST转换为PDT,反之亦然),此解决方案将不起作用
为了克服这个问题,我们在用户提交记录时在用户表中添加了时区列
Id(唯一标识符)
提交日期(日期时间)
记录编号(唯一标识符)
提交时区(varchar)
所以,a)当用户从夏令时开启的时区查询记录,并且在夏令时开启时提交记录时,我们不会做任何补偿
b) 当用户从夏令时启用的时区查询记录,并在夏令时禁用时提交记录时,我们将在偏移量中添加1小时
c) 当用户从夏令时关闭的时区查询记录,并在夏令时打开时提交记录时,我们将在偏移量中添加-1小时
d) 当用户从夏令时关闭的时区查询记录时,提交的记录也会在夏令时关闭时提交,我们不会做任何补偿
这是处理不同时区的时区/夏令时的正确方法吗?
注意:我们正在确定提交的记录也是在夏令时按提交列提交的。时区值最后两个字为“夏令时”
比如“阿拉斯加夏时制”、“东部夏时制”
在这里,夏令时可能在一个时区开启,而在另一个时区关闭。可能我们必须根据提交的日期和提交的时区列计算请求用户时区的偏移量 在这种情况下,我们不能向提交的日期时间添加偏移量,因为偏移量将随着夏令时的影响而改变 因此,用户提交记录和查询提交记录数时的偏移量可以不同。这将导致记录数量不正确 解决方法是获取请求用户的时区,并将每条记录的submittedDatetime值转换为请求用户的时区,然后根据日期计算提交的记录数 注: