Преобразование DateTimeOffset в DateTime в SQL сервере
Быстрый ответ
Чтобы преобразовать DateTimeOffset в DateTime, вы можете использовать функцию CONVERT, указав формат 1 для UTC:
SELECT CONVERT(DateTime, yourDateTimeOffsetColumn, 1) AS ConvertedDateTime
FROM yourTableName;
Этот код позволяет преобразовать DateTimeOffset в DateTime, при этом корректно учитывает временное смещение.

Особенности преобразований
При конвертации DateTimeOffset в DateTime важно обеспечить точность временных отметок.
Корректировка с учётом временных смещений
Не забудьте учитывать смещение времени в DateTimeOffset. Важно, чтобы преобразованное DateTime соответствовало исходному времени DateTimeOffset по UTC:
-- Преобразовываем в UTC, сохраняя секунды!
SELECT SWITCHOFFSET(yourDateTimeOffsetColumn, '+00:00') AS UTCDateTimeOffset,
CONVERT(DateTime2, SWITCHOFFSET(yourDateTimeOffsetColumn, '+00:00')) AS ConvertedDateTime
FROM yourTableName;
Функция SWITCHOFFSET приводит DateTimeOffset к UTC, после чего производится преобразование в DateTime2, обеспечивая высокую точность.
Использование AT TIME ZONE для обеспечения точности
Начиная с SQL Server 2016, можно использовать AT TIME ZONE для преобразования с учётом временной зоны:
-- Словно в кинотеатре, но вместо попкорна – временные зоны!
SELECT yourDateTimeOffsetColumn AT TIME ZONE 'UTC' AT TIME ZONE 'Pacific Standard Time' AS ConvertedDateTime
FROM yourTableName;
AT TIME ZONE обеспечивает преобразование DateTimeOffset в DateTime, соответствующий UTC.
Сохранение точности с помощью DateTime2
Рекомендуется преобразовать в DateTime2 перед переходом к DateTime для сохранения точности:
-- Время ценнее, чем деньги!
SELECT CONVERT(DateTime2, yourDateTimeOffsetColumn) AS DateTime2Format
FROM yourTableName;
Используйте CONVERT со стилем 126 для сохранения максимальной точности при переводе в DateTime:
-- Точность – залог правильных решений!
SELECT CONVERT(DateTime2, yourDateTimeOffsetColumn, 126) AS HighPrecisionDateTime
FROM yourTableName;
Визуализация
Преобразование DateTimeOffset в DateTime можно представить как перемещение между временными зонами:
Начальная точка DateTimeOffset (🚉)
[2023-04-12 08:00:00 +02:00]
|
| (Преобразование с учётом временных зон)
V
Конечная точка DateTime (🏫) [2023-04-12 06:00:00]
Важно помнить: корректировка временной зоны похожа на перемещение часовой стрелки, как при прибытии поезда на конечную станцию.
Понимание различия между локальным временем и UTC
Преобразование дат и времени включает в себя множество нюансов, связанных с ними, таких как учёт локального и UTC времени.
Учёт различий в локальном времени
Для работы с локальным временем используйте GETUTCDATE(), чтобы обеспечить исполнение запросов с учётом текущего времени в UTC:
-- Контролируем время!
SELECT GETUTCDATE() AS CurrentUTCTime;
Управление различиями часовых поясов сервера
Чтобы определить смещение времени сервера, можно использовать функцию DATEPART с параметром 'tz':
-- Берём под контроль временное смещение
SELECT DATEPART(tz, SYSDATETIMEOFFSET()) AS ServerTimezoneOffset;
Учитывайте различия в часовых поясах сервера, чтобы исключить ошибки при преобразовании.
Проверка результатов преобразования
Тестирование преобразований должно быть максимально точным. Проверьте разные значения DateTimeOffset, учитывая летнее время и такие детали, как секунды коррекции:
-- Время для экспериментов!
Автоматизируйте ваши тесты, чтобы сравнить ожидаемые и фактические результаты DateTime.
Полезные материалы
- Структура DateTimeOffset (System) | Microsoft Learn — детализированное руководство по
DateTimeOffsetот MSDN. - Функции CAST и CONVERT (Transact-SQL) – SQL Server | Microsoft Learn — инструкция по преобразованию типов данных, включая преобразование
DateTimeOffsetвDateTime. - c# – DateTime vs DateTimeOffset – Stack Overflow — обсуждение различий и выбора между
DateTimeиDateTimeOffset. - Функции CAST и CONVERT (Transact-SQL) – SQL Server | Microsoft Learn — официальные материалы Microsoft по функциям CAST и CONVERT, включая различные стили представления даты и времени.
- Типы данных дат и времени и функции – SQL Server (Transact-SQL) | Microsoft Learn — обзор типов данных и функций для работы с датой и временем в SQL Server.