2010-06-03 16 views
14

Wir speichern alle unsere Daten SQL Server 2008-Datenbank in UTC-Zeit in DateTime-Spalten. Ich verwende SSRS, um Berichte zu erstellen, und ich muss alle Zeiten in den Berichten in die Zeitzone des Computers umwandeln, auf dem der Bericht ausgeführt wird.Arbeiten mit Zeitzonen in SSRS

Ich weiß, könnte immer nur die aktuelle Zeitzone Offset als Parameter an den Bericht übergeben und addieren oder subtrahieren den Offset von der Zeitzone, aber dies würde nicht korrekt zeigen historische Daten wegen der Sommerzeit.

Hat SSRS irgendwelche Funktionen, die damit umgehen? Soll ich die Zeitzone an die SQL-Server-Funktionen übergeben und habe den SQL-Server die Zeit umrechnen lassen?

Antwort

14

Ich fand es heraus. Im SSRS Bericht, ich habe ein Verweis auf die Assembly hinzugefügt System.Core

Dann überall ich die Zeitzone zu konvertieren brauchte ich verwendet:

= Code.FromUTC (Fields UTCDateFromDatabase.Value, Parameter! TimeZone.Value)

wo Parameter TimeZone.Value der String-Wert der Zeitzone, die unter Verwendung TimeZone.CurrentTimeZone.StandardName in der Anwendung abgerufen werden kann

ich wahrscheinlich setzen sollte, was FromUTC tut:

mit diesem
Shared Function FromUTC(ByVal d As Date, ByVal tz As String) As Date 
Return (TimeZoneInfo.ConvertTimeBySystemTimeZoneId(d, TimeZoneInfo.Utc.Id, tz)) 
end function 
+0

Das ist in Ordnung, wenn man nur die Funktion es ein paar Mal anrufen, aber nicht, wenn Sie die Funktion für jede Zeile fordern. Bei einem großen Bericht wirkt sich der Aufruf der Funktion für jede Zeile auf die Leistung der Exporte aus. Ich habe leider keine Alternative gefunden. – Kev

+0

@ClassyFedora - Nicht speziell SSRS, aber [dies könnte helfen] (https://github.com/mj1856/SqlServerTimeZoneSupport) –

7

Versuchen Sie stattdessen:

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

Für SSRS von AX 2012 genannt berichtet, ist es das, was ich benutze.

Kredit geht zu diesem Beitrag: http://social.msdn.microsoft.com/Forums/en-US/500448a3-bf58-44ab-8572-81becd67d8b8/convert-utc-time-to-local-time?forum=sqlreportingservices

+5

Funktioniert das wirklich? Die Berichte werden serverseitig gerendert. Dies würde nur zur lokalen Serverzeit und nicht zur lokalen Zeit des Benutzers konvertiert. – m0n0ph0n