Добавление n секунд к 1970-01-01
даст вам UTC-дату , потому что n , метка времени Unix, равна количество секунд, прошедшее с 00:00:00 всемирного координированного времени (UTC), четверг, 1 января 1970 года .
В SQL Server 2016 вы можете конвертировать один часовой пояс в другой, используя AT TIME ZONE
. Вам просто нужно знать название часового пояса в стандартном формате Windows:
SELECT *
FROM (VALUES (1514808000), (1527854400)) AS Tests(UnixTimestamp)
CROSS APPLY (SELECT DATEADD(SECOND, UnixTimestamp, '1970-01-01') AT TIME ZONE 'UTC') AS CA1(UTCDate)
CROSS APPLY (SELECT UTCDate AT TIME ZONE 'Pacific Standard Time') AS CA2(LocalDate)
| UnixTimestamp | UTCDate | LocalDate |
|---------------|----------------------------|----------------------------|
| 1514808000 | 2018-01-01 12:00:00 +00:00 | 2018-01-01 04:00:00 -08:00 |
| 1527854400 | 2018-06-01 12:00:00 +00:00 | 2018-06-01 05:00:00 -07:00 |
Или просто:
SELECT *, DATEADD(SECOND, UnixTimestamp, '1970-01-01') AT TIME ZONE 'UTC' AT TIME ZONE 'Pacific Standard Time'
FROM (VALUES (1514808000), (1527854400)) AS Tests(UnixTimestamp)
| UnixTimestamp | LocalDate |
|---------------|----------------------------|
| 1514808000 | 2018-01-01 04:00:00 -08:00 |
| 1527854400 | 2018-06-01 05:00:00 -07:00 |
Примечания:
- Вы можете отключить информацию о часовом поясе, применив
DATETIMEOFFSET
к DATETIME
.
- Преобразование учитывает переход на летнее время. Тихоокеанское время было UTC-08: 00 января 2018 года и UTC-07: 00 июня 2018 года.