Qual è la migliore pratica per il salvataggio di TimeZones nel database?

8

Vogliamo iniziare a raccogliere fusi orari per ciascuno dei nostri indirizzi nel database. Qual è la migliore pratica per memorizzare i fusi orari? Come faresti ad acquisire i fusi orari per i record degli indirizzi esistenti?

Uso il server Microsoft SQL, .net mvc, C #. Ogni suggerimento sarà molto apprezzato.

    
posta Rodney 25.04.2013 - 23:23
fonte

4 risposte

4

Vuoi archiviare qualcosa che non cambi tutto il tempo (o due volte l'anno). Il database link del fuso orario è esattamente la cosa giusta. Quindi memorizzi solo due lettere.

Da questo database è possibile richiedere l'offset dell'ora e quando è attiva l'ora legale. Non è solo l'offset di tempo, ma ti dà anche un'area, così tanti posti alla stessa latitudine avranno codici diversi e possono cambiare individualmente le loro regole del fuso orario, e il tuo software sarà in grado di gestirli.

L'unica volta in cui è necessario apportare modifiche al database è quando una posizione cambia il fuso orario a cui appartiene, il che sarebbe molto raro.

    
risposta data 26.08.2017 - 19:56
fonte
3

La migliore pratica assoluta sarebbe quella di utilizzare un database che supporti il tipo di dati TIMESTAMP WITH TIMEZONE definito da SQL99.

SQL Server ha un tipo chiamato datetimeoffset che fa tutto ciò che TIMESTAMP WITH TIMEZONE può fare tranne memorizzare il fuso orario effettivo. Tutto quello che puoi fare è memorizzare un offset da UTC (ad esempio 2013-05-04 12:34:56 -5:00 ), il che significa che dovrai stabilirlo prima dello spazio di archiviazione in base al fuso orario.

    
risposta data 25.04.2013 - 23:52
fonte
3

Supponendo che stai usando .Net framework 4.0 o successivo, TimeZoneInfo è ciò che hanno bisogno.

Archivia tutti i valori di data nel database in formato UTC. Utilizzare il valore ID o il risultato di ToSerializedString () per ciascun client per creare un oggetto TimeZoneInfo per convertire le date memorizzate nel formato locale per la visualizzazione.

    
risposta data 26.04.2013 - 11:16
fonte
2

Hai detto di voler memorizzare un fuso orario per ogni indirizzo nel tuo DB, ma non hai detto cosa vuoi fare con esso. Memorizzare qualcosa in un DB raramente è fine a se stesso.

In ogni caso, cercherò di utilizzare il database TZ , noto anche come database Olsen, direttamente o utilizzando un po 'di il software per scaffali che integra TZ. Puoi memorizzare un fuso orario semplicemente come una stringa per fare riferimento a una delle voci TZ DB , ad es. 'Africa / Kampala' o 'Europa / Parigi'.

    
risposta data 26.08.2017 - 19:01
fonte

Leggi altre domande sui tag