SQL Server 2008 - 如何将GMT(UTC)日期时间转换为本地日期时间?

sla*_*dau 10 sql t-sql sql-server datetime sql-server-2008

我有一个插入proc GETDATE()作为其中一个值传入,因为每个插入也存储插入的时间.它托管在SQL Azure上 - 它使用GMT.

现在,当我收到消息时,我在其时间戳列中为每个消息存储了GMT日期,datetime当您访问我的页面时,如何将其转换为本地?

谢谢.

Ale*_*Aza 11

你可以这样做:

declare @InputUtcDateTime datetime2 = '2011-05-20 06:30:18'

declare @LocalDateTime datetime2 = dateadd(minute, datepart(TZoffset, sysdatetimeoffset()), @InputUtcDateTime)
print @LocalDateTime
Run Code Online (Sandbox Code Playgroud)

要么

declare @InputUtcDateTime datetime2 = '2011-05-20 06:30:18'

declare @LocalDateTime datetime2 = dateadd(minute, datediff(minute, sysutcdatetime(), sysdatetime()), @InputUtcDateTime)
print @LocalDateTime
Run Code Online (Sandbox Code Playgroud)

  • 这两个都是不正确的.它们依赖于以下假设:今天的本地时区的偏移量与输入UTC日期所引用的本地时区的偏移量相同.由于当地时区可能受DST影响,因此过去的偏差可能与今天不同. (28认同)
  • 在给定任意输入时间的情况下,尝试获取本地时区的正确时间? (6认同)
  • @wasabi +1 - 你对这种方法的局限性是正确的.但是我不同意这是不正确的.这取决于你想要达到的目标. (3认同)

bwp*_*rin 5

除了夏令时问题,为什么不简化:

yourDateTime - getutcdate() + getdate()
Run Code Online (Sandbox Code Playgroud)