Конвертировать getdate () в EST - PullRequest
11 голосов
/ 17 января 2011

Я хотел бы преобразовать getdate() в SQL Server в EST время.

Ответы [ 11 ]

8 голосов
/ 08 ноября 2016

Это все неправильные ответы

EST к UTC не всегда разница в 5 часов. Это зависит от экономии времени суток Это может быть 4 часа или 5 часов. http://ww2010.atmos.uiuc.edu/(Gh)/guides/maps/utc/frutc.rxml

8 голосов
/ 17 января 2011

Рассматривали ли вы GETUTCDATE () и выполняете ли оттуда смещение?Если вы имеете в виду EST как в стандартном времени, то это UTC-5, поэтому

select dateadd(hour,-5,GETUTCDATE())
2 голосов
/ 30 мая 2018

Сам сервер SQL имеет таблицу current_utc_offset с правильным смещением для летнего и зимнего времени.Пожалуйста, попробуйте запрос select * from current_utc_offset, измените дату на сезон на вашем сервере и снова просмотрите таблицу.Таким образом, правильная функция для получения EST будет:

CREATE FUNCTION [dbo].[Getestlocaldatetime] () 
returns DATETIME 
AS 
  BEGIN 
      DECLARE @zz NVARCHAR(12); 
      DECLARE @hh NVARCHAR(3); 
      DECLARE @dd DATETIME; 

      SET @zz = (SELECT current_utc_offset 
                 FROM   sys.time_zone_info 
                 WHERE  NAME = N'US Eastern Standard Time') 
      SET @hh = Substring(@zz, 1, 3); 
      SET @dd = Dateadd(hh, CONVERT(INT, @hh), Getutcdate()) 

      RETURN @dd 
  END 
2 голосов
/ 17 января 2011

Вы также можете попробовать

select SWITCHOFFSET ( SYSDATETIMEOFFSET(), '-05:00')
1 голос
/ 28 апреля 2016

EST - GMT-5 часов, а EDT - GMT-4 часа.

Для получения EST:

select dateadd(hour,-5,GETUTCDATE())

Для получения EDT:

select dateadd(hour,-4,GETUTCDATE())
0 голосов
/ 14 января 2019

Если вы хотите сделать это без вызова функции, вы можете сделать это и с помощью оператора CASE.Приведенный ниже код преобразует поле UTC в Mountain Time с учетом перехода на летнее время.Для EST вы просто измените все -6 на -4 и все -7 на -5.

--Adjust a UTC value, in the example the UTC field is identified as UTC.Field, to account for daylight savings time when converting out of UTC to Mountain time.
CASE
    --When it's between March and November, it is summer time which is -6 from UTC
    WHEN MONTH ( UTC.Field ) > 3 AND MONTH ( UTC.Field ) < 11 
        THEN DATEADD ( HOUR , -6 , UTC.Field )
    --When its March and the day is greater than the 14, you know it's summer (-6)
    WHEN MONTH ( UTC.Field ) = 3
        AND DATEPART ( DAY , UTC.Field ) >= 14 
        THEN
            --However, if UTC is before 9am on that Sunday, then it's before 2am Mountain which means it's still Winter daylight time.
            CASE 
                WHEN DATEPART ( WEEKDAY , UTC.Field ) = 1 
                    AND UTC.Field < '9:00'
                    --Before 2am mountain time so it's winter, -7 hours for Winter daylight time
                    THEN DATEADD ( HOUR , -7 , UTC.Field )
                --Otherwise -6 because it'll be after 2am making it Summer daylight time
                ELSE DATEADD ( HOUR , -6 , UTC.Field )
            END
    WHEN MONTH ( UTC.Field ) = 3
        AND ( DATEPART ( WEEKDAY , UTC.Field ) + 7 ) <= DATEPART ( day , UTC.Field ) 
        THEN 
            --According to the date, it's moved onto Summer daylight, but we need to account for the hours leading up to 2am if it's Sunday
            CASE 
                WHEN DATEPART ( WEEKDAY , UTC.Field ) = 1 
                    AND UTC.Field < '9:00'
                    --Before 9am UTC is before 2am Mountain so it's winter Daylight, -7 hours
                    THEN DATEADD ( HOUR , -7 , UTC.Field )
                --Otherwise, it's summer daylight, -6 hours
                ELSE DATEADD ( HOUR , -6 , UTC.Field )
            END
    --When it's November and the weekday is greater than the calendar date, it's still Summer so -6 from the time
    WHEN MONTH ( UTC.Field ) = 11
        AND DATEPART ( WEEKDAY , UTC.Field ) > DATEPART ( DAY , UTC.Field ) 
        THEN DATEADD ( HOUR , -6 , UTC.Field )
    WHEN MONTH ( UTC.Field ) = 11
        AND DATEPART ( WEEKDAY , UTC.Field ) <= DATEPART ( DAY , UTC.Field ) 
            --If the weekday is less than or equal to the calendar day it's Winter daylight but we need to account for the hours leading up to 2am.
            CASE 
                WHEN DATEPART ( WEEKDAY , UTC.Field ) = 1 
                    AND UTC.Field < '8:00'
                    --If it's before 8am UTC and it's Sunday in the logic outlined, then it's still Summer daylight, -6 hours
                    THEN DATEADD ( HOUR , -6 , UTC.Field )
                --Otherwise, adjust for Winter daylight at -7
                ELSE DATEADD ( HOUR , -7 , UTC.Field )
            END
    --If the date doesn't fall into any of the above logic, it's Winter daylight, -7
    ELSE
        DATEADD ( HOUR , -7 , UTC.Field )
END
0 голосов
/ 19 сентября 2018
SELECT CONVERT(VARCHAR, CONVERT(DATETIME, GETDATE() AT TIME ZONE 'UTC' AT TIME ZONE 'Eastern Standard Time'), 100) AS [Date_Result]

https://stackoverflow.com/a/49449695/6559330

0 голосов
/ 04 сентября 2018

Для тех, кто использует последнюю версию сервера sql, можно создать функцию .net

Скалярная функция (SVF) возвращает одно значение, такое как строковое, целое или битовое значение.Вы можете создавать определяемые пользователем скалярные функции в управляемом коде, используя любой язык программирования .NET Framework.Эти функции доступны для Transact-SQL или другого управляемого кода.Для получения информации о преимуществах интеграции CLR и выбора между управляемым кодом и Transact-SQL.

Поскольку .NET имеет доступ ко всем часовым поясам в операционной системе, поэтому вам не нужно рассчитывать переход на летнее время -4 или -5 основ.

var timeUtc = DateTime.UtcNow;
TimeZoneInfo easternZone = TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time");
DateTime easternTime = TimeZoneInfo.ConvertTimeFromUtc(timeUtc, easternZone);
0 голосов
/ 19 июня 2017

Если вы пытаетесь вывести местное время, например, восточное время, с помощью перехода на летнее время, вам нужна функция, которая определяет начало и конец летнего времени, а затем применяет переменное смещение: я обнаружил следующее:http://joeyiodice.com/convert-sql-azure-getdate-utc-time-to-local-time/ полезно.

0 голосов
/ 26 октября 2016

с использованием GETDATE ():

GMT:

ДАТА БУДЕТ ОТОБРАЖЕНА:

SELECT GETDATE()

image1

EST:

GETDATE ИСПОЛЬЗОВАТЬ () ДЛЯ КОНВЕРСИИ СЕЙЧАС:

SELECT DATEADD(HOUR, -4, CONVERT(varchar(20),GETDATE(),120))

image2

...