Domanda

Sto cercando di determinare come implementare l'ora locale in un'app Web. Tutti gli utenti hanno effettuato l'accesso, non ci sono utenti anonimi. Dovranno vedere tutti i valori orari nella loro ora locale.

È così che dovrebbe essere fatto?

  1. Tutti i valori di DateTime vengono salvati come ora UTC nel database
  2. Ogni utente ha un valore di offset UTC memorizzato nel suo profilo
  3. Quando visualizzo un valore datetime, prendo il valore dal database e applico l'offset degli utenti.

È questa la strada da percorrere? O mi sto perdendo qualcosa?

È stato utile?

Soluzione

Non memorizzare un offset UTC per l'utente: non è sufficiente conoscere le informazioni complete sul fuso orario. Dovresti archiviare il ID fuso orario Olson , ad es. & Quot; Europe / London " ;. Quindi è possibile visualizzare qualsiasi ora UTC nell'ora locale, tenendo conto delle modifiche storiche, dell'ora legale ecc.

EDIT: sembra che l'ID TimeZoneInfo non sia effettivamente nel normale formato Olson - ma fintanto che c'è qualcosa di ragionevole che puoi mostrare all'utente (come una scelta) e un ID puoi recuperare la zona in seguito, probabilmente va bene ... potresti avere difficoltà se hai bisogno di interagire con altri sistemi in seguito.

Dovresti chiedere all'utente il proprio fuso orario (possibilmente cercando di indovinarlo prima tramite JavaScript) - avranno più informazioni di te.

Dovresti esaminare la TimeZoneInfo per ulteriori informazioni su questo - non posso dire di averlo usato molto da solo, ma è la strada da percorrere a partire da .NET 3.5. In particolare, FindSystemTimeZoneById e GetSystemTimeZones sarà importante.

I fusi orari sono un problema in generale, ma almeno TimeZoneInfo offre molto più supporto rispetto al vecchio tipo TimeZone .

Altri suggerimenti

Mi sembra il modo più semplice. Le uniche sorprese che ho potuto vedere sono alcune aree (come parti dell'Indiana e penso che tutta l'Arizona) non cooperino con l'ora legale, quindi dovrai prendere ulteriori precauzioni per visualizzare l'ora corretta per loro.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top