CURRENT_UTC_TIME和时区问题



希望您能理解并帮助我。

My Sql Server is in South Africa(GMT+2)

My Application is in USA (GMT-6)

我的客户(手机)曾经在南非,现在在巴西(GMT-4)。

表中记录的LastUpdateTime应该是10:25am,而客户端时间是4:25am。此时,服务器指示2:25am(或类似的时间)

我教我可以使用GETUTCDATE函数在sql现在插入。但我的问题是:

  1. 我如何将所有旧记录的LastUpdateTime自动转换为UTC DATE ?

  2. 这个转换是一个好主意还是我可以在应用程序中做?

  3. 我如何允许配置服务器时区在我的web.config文件appSetting节(这是为了提到它每次服务器时区的变化)?

有两种不同的方式可以接受存储像LastUpdateTime这样的值:

  • 对于UTC,在datetimedatetime2字段中
  • 表示本地时间,在datetimeoffset字段

如果您将本地时间存储在datetime字段中,那么该值可能是不明确的。转换为UTC将需要外部知识如何捕获原始数据。

如果这些值是由SQL的GETDATE语句捕获的,那么SQL Server的时区是相关的。南非的时间一直是UTC+02:00,所以您可以:

  • 保持相同字段的值并减去两个小时以调整为UTC
  • ,将值复制到datetimeoffset字段,保留原始值并使用UTC+02:00偏移量。

但是,如果该值是在另一个时区获得的,那么您需要知道该时区是哪个时区。你也可能会遇到夏令时的问题,因为许多时区并没有固定到一个偏移量。

你说应用程序是在美国GMT-6,但这没有意义。美国的中部时间在UTC-06:00和UTC-05:00之间交替,而美国的山地时间在UTC-07:00和UTC-06:00之间交替。你需要知道它是哪个时区,然后你必须为可能的重叠做好准备,因为夏时制转换的回落。

关于是否到web。配置文件-这更像是一个ASP。Net问题,而不是SQL Server问题。但是,我现在可以告诉您,没有神奇的配置设置可以做到这一点。您的应用程序必须正确地使用DateTimeDateTimeKind.Utc,或者使用DateTimeOffset,您可能需要使用TimeZoneInfo来进行转换。这里不可能提供更好的建议,因为您没有展示任何代码,而且这是一个非常广泛的主题。

相关内容

  • 没有找到相关文章

最新更新