Получить правильную дату из отметки времени в часовом поясе - PullRequest
0 голосов
/ 12 февраля 2020

У меня есть (Azure) SQL База данных сервера с временными метками в UT C. Я хочу получить дату в указанном c часовом поясе.

Ниже показана проблема

DECLARE @TS DateTime2='2020-02-08 23:00:00'

SELECT CAST((@TS at time zone 'W. Europe Standard Time') as date) as StartDate, @TS as StartTimeStampUTC, @TS at time zone 'W. Europe Standard Time' as StartTimeStampLocalTime

StartTimeStampUT C: 2020-02-08 23: 00: 00.0000000
StartTimeStampLocalTime: 2020-02-08 23: 00: 00.0000000 +01: 00
StartDate: 2020-02-08

Я бы ожидал, что значение StartDate будет 2020-02-09, так как местное время 2020-02-08 23:00 + 01:00 = 2020-02-09 00: 00

Как мне получить правильную дату?

Ответы [ 2 ]

1 голос
/ 12 февраля 2020

Вы можете выполнить описанный ниже процесс на SQL Сервер. 1. Получите UT C время, используя - GETUTCDATE () 2. Получите разницу между вашим DateTime и UT C DateTime, используя следующую ссылку - https://dzone.com/articles/dates-and-times-in-sql-server-at-time-zone 3. Добавьте эту разницу в UT C DateTime

Пожалуйста, найдите ниже скрипт - SELECT GETDATE () AS 'Local Timezone', GETUTCDATE () AS 'Utc_Timezone', (DATEADD (HOUR, 5, DATEADD (MINUTE, 30, GETUTCDATE ()))) как ' Местный часовой пояс основан на UT C '

Я добавил 5:30 часов в зависимости от своего местного часового пояса.

enter image description here

0 голосов
/ 12 февраля 2020

Это, кажется, делает трюк:

SELECT CAST(dateadd(hour,DATEdiff(hour,@TS AT TIME ZONE 'W. Europe Standard Time',@TS ),@TS) as date) as StartDate

ответ теперь 2020-02-09, как и ожидалось

...