2013-11-14 3 views
1

В моей базе данных есть значения даты, сохраненные в часовом поясе GMT ​​в формате int. Я пытаюсь преобразовать дату в местный часовой пояс, но проблема возникает, когда дата является прошлой датой. Например, в моем случае смещение на дату 1 декабря 2012 года будет -5, а на 15 июня 2010 года будет -4 на летнее время. Я сейчас в EST.GET UTC Дата последней даты

Так что мне нужно знать, что было датой UTC предыдущей даты, чтобы определить, будет ли -4 или -5 смещением для этой даты.

SELECT Test_Number, 
Last_Test_Date, dateAdd(hour, 
     datediff(hour, GETUTCDATE(), getdate()), --UTC offset 
     dateadd(second, Last_Test_Date, '1/1/1970 12:00 AM')) 
FROM TestTable 

Я не совсем уверен, возможно ли это. Любое мнение?

+1

Используйте таблицу календаря. Вы не можете использовать сегодняшнее смещение для вычисления смещения. в прошлом. Тем более, что даты различаются с каждым годом, а также изменяются фактические правила. Смещения в конце ДСТ 10 лет назад, например, отличаются от прошлого года. –

+0

Не зависеть от кода времени выполнения Windows, если вы серьезно относитесь к этому. Старая версия поддерживала только один набор часовых поясов UTC в часовом поясе, я думаю, что он по-прежнему поддерживает только два способа в последних версиях. –

ответ

1

Похоже, вы действительно хотите преобразовать время UTC, хранящееся в базе данных, в локальную дату/время с правильным смещением (-5 или -4).

В SQL Server нет хорошего способа сделать это.По крайней мере, еще нет.

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

Например, если приложение написано на .NET, вы можете использовать TimeZoneInfo или Noda Time, чтобы обрабатывать конверсии в любой желаемый часовой пояс. Если вы используете что-то еще, дайте мне знать, и я обновлю вопрос.

+0

Спасибо, Мэтт, я использую SSRS, не уверен, можем ли мы что-нибудь закодировать там, чтобы динамически обрабатывать даты и время UTC. – Nanu

Смежные вопросы