2010-06-03 6 views
14

Nous stockons toutes nos dates Base de données SQL Server 2008 au format UTC dans les colonnes DateTime. J'utilise SSRS pour créer des rapports et j'ai besoin de convertir toutes les heures des rapports dans le fuseau horaire de l'ordinateur sur lequel ils exécutent le rapport. Je sais que je pourrais toujours simplement passer le décalage de fuseau horaire en tant que paramètre du rapport et ajouter ou soustraire le décalage du fuseau horaire, mais cela ne montrerait pas correctement les dates historiques en raison de l'heure d'été.Utilisation des fuseaux horaires dans SSRS

Est-ce que SSRS a des fonctions qui gèrent cela? Dois-je passer le fuseau horaire aux fonctions du serveur SQL et avoir le SQL Server convertir l'heure?

Répondre

14

Je l'ai compris. Dans le rapport SSRS, j'ai ajouté une référence à l'ensemble System.Core

Alors où je avais besoin de convertir le fuseau horaire je:

= Code.FromUTC (champs UTCDateFromDatabase.Value, Paramètres! TimeZone.Value)

où les paramètres TimeZone.Value est la valeur de chaîne du fuseau horaire qui peut être récupéré dans l'application à l'aide TimeZone.CurrentTimeZone.StandardName

Je devrais probablement mettre ce fait 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

Ceci est bien si vous n'appelez la fonction quelques fois, mais pas si vous appelez la fonction pour chaque ligne. Pour un rapport volumineux, l'appel de votre fonction pour chaque ligne aura une incidence sur les performances des exportations. Je n'ai pas été capable de trouver une alternative malheureusement. – Kev

+0

@ClassyFedora - Pas spécifiquement SSRS, mais [ceci pourrait aider] (https://github.com/mj1856/SqlServerTimeZoneSupport) –

7

Essayez d'utiliser ceci:

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

Pour SSRS rapports demandés à partir AX 2012, ce que je l'utilise.

Le crédit va à ce poste: http://social.msdn.microsoft.com/Forums/en-US/500448a3-bf58-44ab-8572-81becd67d8b8/convert-utc-time-to-local-time?forum=sqlreportingservices

+5

Est-ce que cela fonctionne vraiment? Les rapports sont rendus sur le serveur. Cela convertirait uniquement à l'heure locale du serveur, pas à l'heure locale de l'utilisateur. – m0n0ph0n

Questions connexes