我负责提出在棕地应用程序中实现用户特定时区的解决方案。存储在数据库中的每个日期都存储在服务器的本地时间中。这些日期没有存储时区或偏移信息。
这是一个非常大的应用程序,所以我意识到这将是很多工作。我担心的是,我们尽可能降低风险。有没有人这样做过?如果是这样,最好的方法是什么,以及要避免哪些陷阱?
目前的想法是我们将具有有意义时间组件的日期列中的所有数据转换为UTC。然后,在表示层中,我们需要运行一个函数,在我们需要向用户显示时,将日期时间对象从UTC转换为用户的时区。
这是一个带有SQL Server 2008数据库的ASP .NET应用程序。我之所以提到这一点,是因为在这些技术中可能有一些有用的工具我不知道我们可以用来帮助事情变得更顺畅。
答案 0 :(得分:1)
新代码中的这种要求几乎完全适合T-SQL的新datetimeoffset数据类型。但是在遗留代码中,你会遇到一些问题。
有一篇关于名为The Death of DateTime?的新datetimeoffset类型的文章很好,它很好地探讨了datetime的问题。
简而言之,您需要解决以下问题:
一旦你将数据分开,并计算出你刚刚调用的每个组的偏移量:
TODATETIMEOFFSET (expression , time_zone)
当您读取datetimeoffset时,您将获得以前的本地时间,以及记录时的UTC偏移量。
我说几乎是完美的,如果您需要将远程记录的日期时间从去年某个时间转换为当地时间,您需要知道记录时间时的本地偏移量。