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 № 1Il 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.