Sql 当前UTC时间和时区问题

Sql 当前UTC时间和时区问题,sql,sql-server,timezone,Sql,Sql Server,Timezone,我希望你能理解并帮助我 我的Sql Server在南非(GMT+2) 我的申请在美国(GMT-6) 我的客户(手机)在南非,现在在巴西(GMT-4) 表中记录的LastUpdateTime应为上午10:25,而客户端时间为上午4:25。此时服务器指示凌晨2:25(或类似的时间) 我教过我现在可以使用sql中的GETUTCDATE函数进行插入。但我的问题是: 如何将所有旧记录“LastUpdateTime自动转换为UTC日期 这种转换是一个好主意还是我可以在应用程序中这样做 如何允许在我的web.

我希望你能理解并帮助我

我的Sql Server在南非(GMT+2)

我的申请在美国(GMT-6)

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

表中记录的
LastUpdateTime
应为上午10:25,而客户端时间为上午4:25。此时服务器指示凌晨2:25(或类似的时间)

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

  • 如何将所有旧记录“
    LastUpdateTime
    自动转换为UTC日期

  • 这种转换是一个好主意还是我可以在应用程序中这样做

  • 如何允许在我的
    web.config
    文件
    appSetting
    部分中配置服务器时区(这是为了在每次服务器时区更改时提及)


  • 有两种不同的方法可用于存储值,如
    LastUpdateTime

    • 就UTC而言,在
      datetime
      datetime2
      字段中
    • 就本地时间而言,在
      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.config文件,这更像是一个ASP.Net问题,而不是一个SQL Server问题。但是,我现在可以告诉您,没有神奇的配置设置来实现这一点。您的应用程序必须正确使用
    DateTime
    DateTimeKind.Utc
    ,或者使用
    DateTimeOffset
    ,并且您可能需要使用
    TimeZoneInfo
    来进行转换。这里不可能提供更好的建议,因为您没有显示任何代码,这是一个非常广泛的主题。

    有两种不同的方法可以接受存储值,如
    LastUpdateTime

    • 就UTC而言,在
      datetime
      datetime2
      字段中
    • 就本地时间而言,在
      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.config文件,这更像是一个ASP.Net问题,而不是一个SQL Server问题。但是,我现在可以告诉您,没有神奇的配置设置来实现这一点。您的应用程序必须正确使用
    DateTime
    DateTimeKind.Utc
    ,或者使用
    DateTimeOffset
    ,并且您可能需要使用
    TimeZoneInfo
    来进行转换。这里不可能提供更好的建议,因为您没有显示任何代码,这是一个非常广泛的主题。

    有两种不同的方法可以接受存储值,如
    LastUpdateTime

    • 就UTC而言,在
      datetime
      datetime2
      字段中
    • 就本地时间而言,在
      datetimeoffset
      字段中
    如果在
    datetime
    字段中存储了本地时间,则该值可能不明确。转换为UTC需要外部了解原始数据的捕获方式

    如果值是由SQL的
    GETDATE
    语句捕获的,则SQL Server的时区是相关的。南非的时间始终为UTC+02:00,因此您可以:

    • 将该值保留在同一字段中,然后减去两个小时以调整为UTC
    • 或者,将该值复制到
      datetimeoffset
      字段,保留原始值并使用UTC+02:00偏移量
    但是,如果该值是在另一个时区获得的,则需要知道该时区是什么。您还可能遇到夏令时问题,因为许多时区没有固定到单个偏移

    你说申请表是