当前位置: 首页 > 知识库问答 >
问题:

将Azure上的UTC转换为美国东部时间(包括夏时制-动态版本)

寿和通
2023-03-14

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

以下代码仅适用于2019年(由于夏令时从2019年3月10日开始至2019年11月3日。在日期范围内,以下代码在夏令时范围内将美国东部时间提前一小时)。

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

可以有人请给出任何建议如何改善我现有的代码(能够动态工作),这样我就不需要改变功能每一年调整日光节约。

共有1个答案

贺兴平
2023-03-14

由于Azure SQL领先于内部版本,我认为您可以使用语法select getutcdate()at时区'UTC'at时区'Eastern Standard time'。另外,我会切换到getutcdate(),因为无论服务器的TZ如何,它都应该是不变的。有关时区的详细信息,请参阅此处。

 类似资料:
  • 我有一个以 UTC 时区存储交易日期时间的表。我需要将此时间转换为东部时区,即美国东部时间或美国东部夏令时,具体取决于交易日期。 如何在不编写大函数或创建为每个交易日期标记 EST / EDT 的表/视图的情况下执行此操作?

  • 问题内容: 在我的项目中,我获得了json格式的API响应。我得到这样的UTC时间格式的时间字符串值。 我需要将其更改为本地时间。那就是我们使用此应用程序需要显示当地时间的地方。我该怎么做? 这是我尝试过的一些代码: 假设aDate包含 问题答案: 这是我的尝试: 还要注意上午/下午标记的“ a” …

  • 问题内容: 我有一个UTC时间(纪元Unix时间),其格式设置为时间戳,如下所示。 (人类可读的值:2017年5月31日09:57:00) 我需要将格式化为Unix时间的时间戳转换为GPS时间格式,如下所示。 (人类可读的值:2017年5月31日09:57:00) 我需要一个python程序(算法对我来说很好)将Unix时间格式的时间戳转换为GPS时间格式的时间戳。 有一个PHP程序可以这样做。我

  • 我得到一个格式为yyyy-MM-dd HH: mm的字符串,它代表UTC中的日期和时间。下一步是将其放入日历(带时间区UTC)。 此外,还需要创建一个单独的日历,将UTC转换为“欧洲/伦敦”时区(GMT/BST)。 之后,我需要能够检测“欧洲/伦敦”日历是否有DST(日光节约补偿)。 下面的代码将告诉你我已经走了多远,它在一台默认系统时区为GMT的英国计算机上运行正常。但是,当我在一台时区为UTC

  • 问题内容: 我正在寻找将UTC时间字符串转换为Unix时间戳的选项。 我拥有的字符串变量是,需要将其转换为unix时间戳,例如 任何想法如何做到这一点? 问题答案: 首先,unix时间戳没有时间,但以UTC为单位。 在包有功能解析与预计解析时的布局。布局是从参考时间开始构造的。因此,在您的情况下,布局应为。使用Parse之后,您将获得一个可以调用Unix来接收Unix时间戳的结构。

  • 问题内容: 我需要一种简便的方法,可以在不使用任何库的情况下将日期时间戳转换为UTC(从服务器所在的任何时区)。 问题答案: 尝试getTimezone和setTimezone,请参见示例 (但这确实使用了一个类) 更新: 没有任何类,您可以尝试这样的事情: 注意:您可能还需要将时区设置回原始