Обработка часовых поясов в SQL Server

Мне нужно отображать дату и время в соответствии с часовым поясом, выбранным пользователем. Итак, я поддерживаю все даты в базе данных по Гринвичу.

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

SELECT CONVERT(datetime,SWITCHOFFSET(CONVERT(datetimeoffset,GetUTCDate()),'-00:00'))

В режиме дневного светового режима должно быть

SELECT CONVERT(datetime,SWITCHOFFSET(CONVERT(datetimeoffset,GetUTCDate()),'-01:00'))

Как я могу переключить смещение в соответствии с дневным светом? Я сохраняю выбранный пользователем идентификатор отображаемого имени часового пояса в базе данных, который я передаю второму параметру SWITCHOFFSET

Спасибо


person Kalyan    schedule 17.02.2016    source источник
comment
В программном обеспечении, которое используется в нескольких часовых поясах, я всегда позволял слою отображения приложения обрабатывать это. У пользователя есть часовой пояс, выбранный в их операционной системе, а .NET и т. Д. Имеют способы конвертировать время более легко, чем пытаться все это вычислить в SQL.   -  person Tom H    schedule 17.02.2016


Ответы (1)


Обычно вы позволяете это делать уровню пользовательского интерфейса или более высокому уровню абстракции. База данных и бизнес-логика могут лучше всего работать со временем в формате UTC. В противном случае вы должны учитывать смещение во всей своей бизнес-логике, которая использует время из базы данных.

person Peter    schedule 17.02.2016
comment
Ага. Зачем это нужно делать в SQL - где вам нужно указать SQL Server часовой пояс пользователя и запрограммировать все это самостоятельно - когда на самом деле у вас есть идеальный более высокий уровень. Это преобразование внешнего интерфейса, сделайте это там. - person TomTom; 17.02.2016