Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 如何将棕地应用程序转换为使用基于用户的时区?_Asp.net_Sql Server_Timezone_Brownfield - Fatal编程技术网

Asp.net 如何将棕地应用程序转换为使用基于用户的时区?

Asp.net 如何将棕地应用程序转换为使用基于用户的时区?,asp.net,sql-server,timezone,brownfield,Asp.net,Sql Server,Timezone,Brownfield,我负责提出一个解决方案,在棕地应用程序中实现特定于用户的时区。存储在数据库中的每个日期都存储在服务器的本地时间中。这些日期没有存储时区或偏移量信息 这是一个非常大的应用程序,所以我意识到这将是大量的工作。我担心的是,我们这样做的风险尽可能小。以前有人这样做过吗?如果是这样,最好的方法是什么?要避免哪些陷阱 当前的想法是,我们将日期列中具有有意义的时间成分的所有数据转换为UTC。然后,在表示层中,我们需要运行一个函数,在需要向用户显示日期时,将日期时间对象从UTC转换为用户的时区 这是一个带有SQ

我负责提出一个解决方案,在棕地应用程序中实现特定于用户的时区。存储在数据库中的每个日期都存储在服务器的本地时间中。这些日期没有存储时区或偏移量信息

这是一个非常大的应用程序,所以我意识到这将是大量的工作。我担心的是,我们这样做的风险尽可能小。以前有人这样做过吗?如果是这样,最好的方法是什么?要避免哪些陷阱

当前的想法是,我们将日期列中具有有意义的时间成分的所有数据转换为UTC。然后,在表示层中,我们需要运行一个函数,在需要向用户显示日期时,将日期时间对象从UTC转换为用户的时区


这是一个带有SQLServer2008数据库的ASP.NET应用程序。我之所以提到这一点,是因为这些技术中可能有一些有用的工具,我不知道这些工具可以用来帮助事情变得更顺利。

新代码中的这种要求几乎完全适合t-SQL的新datetimeoffset数据类型。但在遗留代码中,您将遇到一些问题

关于新的datetimeoffset类型,有一篇很好的文章叫做datetimeoffset,它很好地探讨了datetime的问题

简而言之,以下是您需要解决的问题:

  • 您可以排除哪些仅日期字段(即时间必须始终为00:00)
  • 日期时间记录在哪些时区
  • 哪些时区有单独的夏令时或夏令时偏移
  • 在您记录日期的所有年份中,夏令时的确切日期范围是什么
  • 如何计算数据中每个日期时间值的偏移量
  • 您将如何解释偏移量变化时的重叠小时数
一旦您将数据拆分,并计算出您刚刚调用的每个组的偏移量:

TODATETIMEOFFSET (expression , time_zone)
当您读取datetimeoffset时,您会像以前一样获得本地时间,加上记录时与UTC的偏移量

我说这几乎是完美的,如果你需要将去年某个时候远程记录的日期时间转换为本地时间,你需要知道记录时间时本地偏移量是多少