/ / AT TIME ZONE, gestione di più fusi orari: sql-server, azure-sql-database

ALLA FUSO ORARIO, gestione di più fusi orari - sql-server, database azure-sql

Sto creando un'applicazione che deve avere la capacità di gestire utenti da più fusi orari e visualizzare correttamente le date per il loro fuso orario specifico.

Ho creato il codice seguente come esempio di ciò che ottengo, ma sono un po 'confuso su quale sia il metodo corretto per gestire il problema del fuso orario.

È meglio farlo salvando tutte le date nel database come UTC e usando AT TIME ZONE di conseguenza, o dovrei pensare in un altro modo?

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

Risultati Test2

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

Risultati Test3

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

risposte:

0 per risposta № 1

Il database SQL Azure usa sempre l'ora UTC. Per questo motivo è necessario utilizzare datetimeoffset.

Dovresti anche acquisire la data del sistema usando sysdatetimeoffset () invece di usare getdate ().

Quando si recuperano le date dalle tabelle del database, è necessario utilizzare "FUSO ORARIO".

Spero che questo ti aiuti.