/ / AT TIME ZONE, gestion de plusieurs fuseaux horaires - sql-server, azure-sql-database

AT TIME ZONE, gérant plusieurs fuseaux horaires - sql-server, azure-sql-database

Je crée une application qui doit pouvoir gérer les utilisateurs de plusieurs fuseaux horaires et afficher les dates correctement pour leur fuseau horaire particulier.

J'ai créé le code ci-dessous comme exemple de ce que j'obtiens, mais je suis un peu confus quant à la bonne méthode pour gérer le problème de fuseau horaire.

Est-il préférable de le faire en stockant toutes les dates dans la base de données au format UTC et en utilisant AT TIME ZONE en conséquence, ou devrais-je penser autrement?

Create Table #Test
(
SampleDate datetimeoffset(7)
)

Create Table #Test2
(
SampleDate datetimeoffset(7)
)

Create Table #Test3
(
SampleDate datetime
)

insert into #Test select getdate()
insert into #Test2 select getdate() AT TIME ZONE "AUS Eastern Standard Time"
insert into #Test3 select getdate()


select
SampleDate,
SampleDate AT TIME ZONE "AUS Eastern Standard Time",
SampleDate AT TIME ZONE "AUS Central Standard Time",
SampleDate AT TIME ZONE "Aus Central W. Standard Time"
from #Test

select
SampleDate,
SampleDate AT TIME ZONE "AUS Eastern Standard Time",
SampleDate AT TIME ZONE "AUS Central Standard Time",
SampleDate AT TIME ZONE "Aus Central W. Standard Time"
from #Test2

select
SampleDate,
SampleDate AT TIME ZONE "AUS Eastern Standard Time",
SampleDate AT TIME ZONE "AUS Central Standard Time",
SampleDate AT TIME ZONE "Aus Central W. Standard Time"
from #Test3

drop table #Test
drop table #Test2
drop table #Test3
2017-09-24 10:59:47.4233333 +00:00
2017-09-24 20:59:47.4233333 +10:00
2017-09-24 20:29:47.4233333 +09:30
2017-09-24 19:44:47.4233333 +08:45

Résultats du test 2

2017-09-24 10:59:47.4230000 +10:00
2017-09-24 10:59:47.4230000 +10:00
2017-09-24 10:29:47.4230000 +09:30
2017-09-24 09:44:47.4230000 +08:45

Résultats du test 3

2017-09-24 10:59:47.423
2017-09-24 10:59:47.423 +10:00
2017-09-24 10:59:47.423 +09:30
2017-09-24 10:59:47.423 +08:45

Réponses:

0 pour la réponse № 1

La base de données SQL Azure utilise toujours l'heure UTC. Pour cette raison, vous devez utiliser datetimeoffset.

Vous devez également capturer la date système à l'aide de sysdatetimeoffset () au lieu d'utiliser getdate ().

Lorsque vous récupérez des dates dans les tables de la base de données, vous devez alors utiliser «AT TIME ZONE».

J'espère que cela t'aides.