Datetime 在SSRS中使用时区

Datetime 在SSRS中使用时区,datetime,ssrs-2008,datetimeoffset,Datetime,Ssrs 2008,Datetimeoffset,我们将SQL Server 2008数据库中的所有日期以UTC时间存储在DateTime列中。 我正在使用SSR创建报告,我需要将报告上的所有时间转换为运行报告的计算机的时区 我知道,您可以将当前时区偏移量作为参数传入报表,然后从时区中添加或减去偏移量,但由于夏令时的原因,这无法正确显示历史日期 SSR是否具有处理此问题的功能?我是否应该将时区传递给SQL server函数并让SQL server转换时间?我已经计算出来了。 在SSRS报告中,我添加了对assembly System.Core的

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

我知道,您可以将当前时区偏移量作为参数传入报表,然后从时区中添加或减去偏移量,但由于夏令时的原因,这无法正确显示历史日期

SSR是否具有处理此问题的功能?我是否应该将时区传递给SQL server函数并让SQL server转换时间?

我已经计算出来了。 在SSRS报告中,我添加了对assembly System.Core的引用

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

=Code.FromUTC(字段!UTCDateFromDatabase.Value,参数!时区.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

请尝试使用此选项:

=System.TimeZone.CurrentTimeZone.ToLocalTime(Fields!DateTime.Value)
对于从AX 2012调用的SSRS报告,这是我使用的


这篇文章值得赞扬:

如果您只调用函数几次,但如果您对每一行都调用函数,那么这就没问题了。对于大型报表,为每一行调用函数将影响导出的性能。不幸的是,我还没有找到替代品。@ClassyFedora-不是特别的SSRS,但是有人有新的方法来做这件事吗?TimeZoneInfo dll中执行此操作所需的代码不安全,因此无法在sql server 2017中工作。我们被迫找到一个解决办法这真的有效吗?报告在服务器端呈现。这将只转换为本地服务器时间,而不是用户的本地时间。它会!它实际上将使用与Dynamics 365中为财务和运营设置的会话时间相同的时间,即使该时间与本地系统时间不同。但是,我最近(很多年)没有在AX 2012中使用它,所以我不确定我最初发布的AX 2012是否正确:)