17

我们将所有日期 SQL Server 2008 数据库以 UTC 时间存储在 DateTime 列中。我正在使用 SSRS 创建报告,我需要将报告上的所有时间转换为它们运行报告的计算机的时区。

我知道总是可以将当前时区偏移量作为参数传递给报告并从时区添加或减去偏移量,但是由于夏令时,这不会正确显示历史日期。

SSRS 是否有任何处理此问题的功能?我应该将时区传递给 SQL Server 函数并让 SQL Server 转换时间吗?

4

2 回答 2

14

我想到了。在 SSRS 报告中,我添加了对程序集 System.Core 的引用

然后在我需要转换我使用的时区的任何地方:

=Code.FromUTC(字段!UTCDateFromDatabase.Value,参数!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
于 2010-06-17T22:04:36.093 回答
10

尝试改用这个:

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

对于从 AX 2012 调用的 SSRS 报告,这是我使用的。

归功于这篇文章:http ://social.msdn.microsoft.com/Forums/en-US/500448a3-bf58-44ab-8572-81becd67d8b8/convert-utc-time-to-local-time?forum=sqlreportingservices

于 2014-03-26T22:31:44.610 回答