2010-06-03 2 views
14

Мы сохраняем все наши даты База данных SQL Server 2008 в UTC в столбцах DateTime. Я использую SSRS для создания отчетов, и мне нужно постоянно конвертировать отчеты в часовой пояс компьютера, на котором выполняется отчет.Работа с часовыми поясами в SSRS

Я знаю, что всегда мог бы просто передать текущее смещение часового пояса в качестве параметра отчета и добавить или вычесть смещение от часового пояса, но это неправильно отображало бы исторические даты из-за летнего сбережения.

Имеет ли SSRS какие-либо функции, которые справляются с этим? Должен ли я передавать часовой пояс на функции сервера SQL и преобразовывать время SQL Server?

ответ

14

Я понял. В докладе SSRS, я добавил ссылку на сборку System.Core

Тогда где мне нужно, чтобы преобразовать часовой пояс, я использовал:

= Code.FromUTC (Fields UTCDateFromDatabase.Value, параметры! TimeZone.Value)

где параметры 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 
+0

Это нормально, если вы только вызов функции несколько раз, но если вы не вызываете функцию для каждой строки. Для большого отчета вызов вашей функции для каждой строки будет влиять на производительность экспорта. К сожалению, я не смог найти альтернативу. – Kev

+0

@ ClassyFedora - Не особенно SSRS, но [это может помочь] (https://github.com/mj1856/SqlServerTimeZoneSupport) –

7

Попробуйте использовать вместо этого:

=System.TimeZone.CurrentTimeZone.ToLocalTime(Fields!DateTime.Value) 

Для SSRS отчетов вызывается из AX 2012, это то, что я использую.

Заслуга на этот пост: http://social.msdn.microsoft.com/Forums/en-US/500448a3-bf58-44ab-8572-81becd67d8b8/convert-utc-time-to-local-time?forum=sqlreportingservices

+5

Действительно ли это работает? Отчеты отображаются на стороне сервера. Это будет конвертировать только время локального сервера, а не в локальное время пользователя. – m0n0ph0n

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