将getdate()转换为EST

der*_*rin 11 sql t-sql sql-server datetime getdate

我想getdate()在SQL Server中转换为EST时间.

Tro*_*eft 12

更新答案 (05-29-2020)

Azure SQL 团队发布了一个新功能,使这变得更加容易。 SELECT CURRENT_TIMEZONE_ID()将返回您服务器的时区。将此函数添加到下面的 ORIGINAL ANSWER 中会生成一个查询,它将在所有 Azure SQL Server 上全局运行。

SELECT CONVERT(DATETIME,GETDATE() AT TIME ZONE (SELECT CURRENT_TIMEZONE_ID()) AT TIME ZONE 'Eastern Standard Time')`
Run Code Online (Sandbox Code Playgroud)

此查询适用于任何 Azure SQL Server。

原始答案:

这里有很多答案不必要地复杂,或者没有考虑到夏令时。不需要大量的CASE声明。不需要新的存储过程或标量/用户定义的函数。从 SQL Server 2016 开始,时区之间的转换可以通过一行原生 sql来完成。这有好处。例如,它可以从报表中调用或在只读数据库上使用。

SELECT CONVERT(DATETIME,GETDATE() AT TIME ZONE 'UTC' AT TIME ZONE 'Eastern Standard Time')
Run Code Online (Sandbox Code Playgroud)

就是这样。上面,我们正在使用这些AT TIME ZONE功能,这里有更详细的描述。这里可能有一些新的功能和特性,所以有必要解释一下。上面的查询调用GETDATE()并将其时区设置为 UTC 使用AT TIMEZONE. 隐含地,这也将其数据类型从 a 更改datetimedatetimeoffset。接下来,我们将AT TIMEZONE再次调用将其切换到 EST。最后,我们将把整个东西包装起来,CONVERT()让它回到一个datetime,在这个过程中去掉不需要的 +/- 小时部分。

逐步进行查询...

SELECT [GetDate]            = GETDATE()
SELECT [GetDateAtUtc]       = GETDATE() AT TIME ZONE 'UTC'
SELECT [GetDateAtUtcAtEst]  = GETDATE() AT TIME ZONE 'UTC' AT TIME ZONE 'Eastern Standard Time'
SELECT [GetDateEst]         = CONVERT(DATETIME,GETDATE() AT TIME ZONE 'UTC' AT TIME ZONE 'Eastern Standard Time')
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

  • GetDateEst(向下第 4 行)让我免于编写一个混乱的函数,将“-5:00”更改为“-5”,以便在 DATEADD 函数中使用。这里有一个点赞!⬆ (2认同)

Ric*_*iwi 8

您是否考虑过GETUTCDATE()并从那里执行偏移?如果你的标准时间是EST,那就是UTC-5,那么

select dateadd(hour,-5,GETUTCDATE())
Run Code Online (Sandbox Code Playgroud)

  • 错了,这不是白天节省时间的原因. (5认同)
  • @Solartic 当然,这个答案在技术上是正确的,因为 EST 与 UTC 的标准差*总是*五。然而,OP 很可能想要一个全年有效的论坛。我说公平,因为人们全年都称其为东部时间。EDT `sys.time_zone_info` 表没有条目。因此,虽然这个答案在技术上是正确的,但我认为可以公平地假设OP想要接受UTC日期并将其正确转换为当前东部时间的东西,无论是否考虑夏令时。因此,我相信这里的其他答案更“有用”。谢谢。 (4认同)
  • @AndroidDebaser您无需考虑日间节能时间.EST将始终为UTC-5.观察者一天节省时间的地方将切换到EDT并且OP特别要求EST.所以这个答案是正确的. (3认同)

Jin*_*kur 8

这些都是错误的答案

EST到UTC并不总是5小时的差异.它取决于节省时间它可以是4小时或5小时. http://ww2010.atmos.uiuc.edu/(Gh)/guides/maps/utc/frutc.rxml