SQL Server Как сохранить и использовать время в разных часовых поясах - PullRequest
2 голосов
/ 23 ноября 2010

В SQL Server я хотел бы создать таблицу для экономии времени события и преобразовать ее в часовой пояс по выбору пользователя для целей отображения. Предположим, что если бы в 13:00 по Гринвичу произошло событие, которое произошло бы в Лондоне, это было бы в 8:00 утра по американскому времени.

Учитывая этот пример я хотел бы создать каркас работы,

  1. , где пользователь может сохранить событие и время (указание часового пояса события)

  2. Считайте эти события, причем время отображается в часовом поясе по своему вкусу (US EST)

Как мне это сделать в SQL Server.

Ответы [ 3 ]

4 голосов
/ 23 ноября 2010

В SQL Server 2008 используйте тип данных DATETIMEOFFSET , который представляет собой DATETIME плюс смещение часового пояса.

SELECT CAST('2010-11-23 16:35:29+09:00' AS datetimeoffset) 

будет 23 ноября 2010 года, 16:35 в +9 часовом (от GMT) часовом поясе.

SQL Server 2008 также содержит функции и команды SQL для преобразования DATETIMEOFFSET значений из одного часового пояса в другой:

SELECT 
SWITCHOFFSET(CAST('2010-11-23 16:35:29+09:00' AS datetimeoffset), '+01:00')

приведет к:

2010-11-23 08:35:29.0000000 +01:00

В то же время, другой часовой пояс (+1 час от GMT)

0 голосов
/ 23 ноября 2010

Я решил похожую проблему следующим образом:

  1. Таблица предназначена только для хранения времени по Гринвичу.
  2. Весь ввод проходит через сохраненный процесс, который требует ввода смещения часового пояса.
  3. Запрос данных для табличной функции со входом для смещения часового пояса.
0 голосов
/ 23 ноября 2010
  1. Когда вы сохраняете данные, сохраняете GMT, а не местное время для пользователя (в c # это DateTime.UtcNow)
  2. В логике вашего приложения запишите часовой пояс пользователя и переведитевремя по Гринвичу по местному времени пользователя с использованием смещения часового пояса во время выполнения.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...