Diciamo per esempio che il vostro utente è a New York (GMT-5) e il vostro server è in India (GMT + 5:30).
Quando l'utente vede un orario "locale" di 10:00 (EST), il server vedrà un orario "locale" di 7:30 pm (IST). Tuttavia, utilizzando l'UTC in entrambe le posizioni .... l'utente vedrebbe un orario UTC di 3pm e il server vedrebbe un orario UTC di 3pm.
L'utilizzo di UTC in tutti i luoghi, ma mantenendo un riferimento del fuso orario degli utenti, consente di lavorare sempre in UTC, ma di convertire i tempi nell'orario "locale" dell'utente quando si desidera visualizzarli.
Inoltre, non è possibile fare affidamento su dove un server è ospitato in modo particolare se si tratta di un server virtuale. Né puoi assumere il fuso orario in cui la società di hosting ha impostato i propri server. È preferibile codificare sempre in modo difensivo utilizzando DateTime.UtcNow
quando si memorizzano le date nella banca dati.
per convertire questo tempo UTC indietro al fuso orario di un utente è necessario effettuare le seguenti operazioni:
DateTime utcTime = new DateTime(2013, 03, 25, 10, 20, 00);
TimeZoneInfo usersTimeZone = TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time");
DateTime usersLocalTime = TimeZoneInfo.ConvertTimeFromUtc(utcTime, usersTimeZone);
Console.WriteLine(utcTime.ToString("hh:mm:ss");
Console.WriteLine(usersLocalTime.ToString("hh:mm:ss");
FYI, è possibile trovare un elenco dei fusi orari da:
TimeZoneInfo.GetSystemTimeZones()
Questo dovrebbe stampare:
10:20:00
05:20:00
Come si può vedere, è necessario conoscere il tempo gli utenti della zona.Ci sono 2 modi per conoscere il tempo degli utenti:
- Avere l'utente seleziona il fuso orario nelle loro preferenze
- utilizzare alcuni javascript per rilevare il fuso orario della loro macchina e post indietro con la forma
Vorrei suggerire la prima opzione in quanto la seconda può rendere le cose più difficili per le persone. Ad esempio, se sono di base nel Regno Unito e volano negli Stati Uniti per la settimana. Tutto cambierà zona e potrebbero non realizzarsi!
Questo è uno per @JonSkeet, adora le domande sui tempi della data :) – mattytommo
Hmm. Non essere il ragazzo che chiede se è collegato, ma: La data/ora sul server è corretta? Almeno, corrisponde a quello sulla tua scatola? – FrankieTheKneeMan
ANCHE: in quale fuso orario è presente il server e in che fuso orario ci si trova? – FrankieTheKneeMan