Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Conversion de n'importe quelle date de l'heure du serveur à l'heure de l'utilisateur (traitant de l'heure d'hiver et de l'heure d'été)

TimeZoneInfo fait, oui. (Cela fait partie du framework .NET, pas de C# - C# n'est que le langage que vous utilisez.) Cependant, je ne pense pas que ce soit ce que vous vouliez vraiment faire.

Pourquoi stockez-vous le DateTime dans le serveur fuseau horaire quand même ? Il serait plus judicieux de le stocker en UTC, dans la plupart des cas. En dehors de toute autre chose, si votre serveur se trouve dans un fuseau horaire qui observe l'heure d'été, vous vous retrouverez avec une heure d'ambiguïté par an, lorsque l'horloge remontera. (La même heure locale apparaît deux fois.)

Une fois que vous l'avez stocké en UTC, vous devez également le donner à votre client Javascript en UTC. Alors que vous dites que vous avez "un script java qui me fera décaler les utilisateurs de l'UTC" - cela dépendra de l'instant exact dans le temps. Par exemple, comme je suis au Royaume-Uni, mon décalage est parfois de 0 et parfois de +1 heure. Si vous retransmettez l'UTC au client, cela peut déterminer l'heure locale à partir de cette heure UTC. Votre serveur ne peut pas, sauf si vous pouvez obtenir un précis représentation du fuseau horaire du client au serveur, ce qui est généralement une chose délicate à faire.

Encore une fois, C # lui-même n'est pas pertinent ici. Il n'est pas clair de quelle partie du framework .NET vous parlez - TimeZone ? TimeZoneInfo ? DateTime ? TimeZoneInfo contient des données historiques, mais uniquement si vous utilisez une version du système d'exploitation qui les prend en charge.

Eh bien, dans la mesure où vous êtes susceptible de vous en soucier. Il n'a pas autant de données historiques que TZDB, et il a des représentations très étranges pour la Russie et la Namibie, mais il a généralement l'idée d'un changement de règles.