Мы храним всю нашу базу данных SQL Server 2008 дат во время UTC в столбцах DateTime. Я использую SSRS для создания отчетов, и я должен преобразовать все времена на отчетах Часовому поясу компьютера, откуда они выполняют отчет.
Я знаю, мог всегда просто передавать в текущем смещении часового пояса в качестве параметра к отчету и добавлять или вычитать смещение из часового пояса, но это правильно не покажет исторические даты из-за перехода на летнее время.
SSRS имеет какие-либо функции, которые обрабатывают это? Я должен передать часовой пояс функциям SQL-сервера и иметь SQL Server, преобразовывают время?
Я разобрался с этим. В отчете SSRS я добавил ссылку на сборку System.Core
Затем везде, где мне нужно было преобразовать часовой пояс, я использовал:
=Code.FromUTC(Fields!UTCDateFromDatabase.Value, Parameters!TimeZone.Value)
где Parameters!TimeZone.Value - это строковое значение часового пояса, которое можно получить в приложении с помощью TimeZone.CurrentTimeZone.StandardName
Наверное, я должен поставить то, что делает FromUTC:
Shared Function FromUTC(ByVal d As Date, ByVal tz As String) As Date
Return (TimeZoneInfo.ConvertTimeBySystemTimeZoneId(d, TimeZoneInfo.Utc.Id, tz))
end function