0

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

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

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

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

4

1 回答 1

1

新代码中的这种要求几乎完美契合了 T-SQL 的新 datetimeoffset 数据类型。但是在遗留代码中你会遇到一些问题。

有一篇关于新的 datetimeoffset 类型的好文章叫做The Death of DateTime? 它很好地探讨了日期时间的问题。

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

  • 您可以排除哪些仅日期字段(即时间必须始终为 00:00)。
  • 日期时间记录在哪些时区
  • 哪些时区有单独的夏令时或夏令时偏移
  • 您记录日期的所有年份的夏令时的确切日期范围是多少
  • 如何计算数据中每个日期时间值的偏移量
  • 您将如何解释偏移量变化时的重叠时间

拆分数据并计算出您刚刚调用的每个组的偏移量后:

TODATETIMEOFFSET (expression , time_zone)

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

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

于 2011-12-22T23:14:41.857 回答