sql-server - 将 Azure 上的 UTC 转换为 EST 时间(包括夏令时动态版本)

标签 sql-server azure utc dst

我对将 UTC 时区转换为 EST 时区有疑问,因为我对 SQL 语言和 Azure 平台还是新手。在日志文件中,我使用日志文件中的系统内置函数“GetDate()”来获取日期/时间。但是,在我的 SSMS 上访问 Azure 数据库时,使用系统内置函数 (GetDate()) 为我提供 UTC 时区的日期时间,比东部时区 (EST) 早 4 小时。我之前曾问过类似的问题,将 UTC 转换为 EST here ,@DanGuzman 帮助我修复了我的代码。但这个问题更多的是关于将 UTC 转换为 EST(动态考虑夏令时)。下面是我到目前为止的代码,我使用了 this链接作为引用。不过,我想让我的代码变得动态,这样我就可以在 2020 年、2021 年继续使用它。

以下代码仅适用于 2019 年(自 2019 年 3 月 10 日夏令时开始至 2019 年 11 月 3 日)。在该日期范围内,以下代码在夏令时范围内将 EST 时间向前推进一小时。

CREATE FUNCTION [dbo].[EST_GetDateTime] 
    (
     -- no parameter
     )
RETURNS datetime
AS
BEGIN

 DECLARE
    @EST datetime,  
    @StandardOffset int,

    @DST datetime,  -- Daylight Saving Time
    @SSM datetime, -- Second Sunday in March
    @FSN datetime  -- First Sunday in November

-- get DST Range
set @EST = CAST(DATEADD(hh,-5,GETDATE()) AS DATETIME)

set @StandardOffset = 0

set @SSM = datename(year,@EST) + '0310'  -- Set which day daylight saving start (for 2019, March 10)
set @SSM = dateadd(hour,2,dateadd(day,datepart(dw,@SSM)*-1+1,@SSM))
set @FSN = datename(year,@EST) + '1103'   -- Set which day daylight saving start (for 2019, March 10)
set @FSN = dateadd(second,-1,dateadd(hour,2,dateadd(day,datepart(dw,@FSN)*-1+1,@FSN)))

-- add an hour to @StandardOffset if @EST is in DST range
if @EST between @SSM and @FSN
    set @StandardOffset = @StandardOffset + 1

-- convert to DST
set @EST = CAST(DATEADD(hh,-5+@StandardOffset ,GETDATE()) AS DATETIME)

    RETURN @EST
END
GO

有人可以提出任何建议如何改进我现有的代码(能够动态工作),这样我就不需要每年更改函数来调整夏令时。

最佳答案

由于 Azure SQL 领先于本地版本,我认为您可以使用语法 select getutcdate() at time zone 'UTC' at time zone 'Eastern Standard Time'。另外,我会切换到 getutcdate() ,因为无论服务器的 TZ 是什么,它都应该是不变的。有关时区的更多信息here .

关于sql-server - 将 Azure 上的 UTC 转换为 EST 时间(包括夏令时动态版本),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54164629/

相关文章:

sql-server - 如何在 SQL Server 2012 中根据特定条件对表进行 INNER JOIN?

sql-server - sqlserver rake db 连接错误 :migrate

sql在多个表中搜索

sql-server - TRY_PARSE 但更快

javascript - 以毫秒 (UTC) 为单位获取当前日期(不使用字符串)

authentication - 使用 ACS 身份验证在 azure 开发中跨域 cookie

azure - Windows 镜像组件的版本

azure - VS Code Azure 帐户扩展要求选择订阅

Javascript:将 UTC Date() 对象转换为本地时区

Java、Hibernate、MySQL - 存储 UTC 日期时间