Nous voulons commencer à collecter des fuseaux horaires pour chacune de nos adresses dans la base de données. Quelle est la meilleure pratique pour stocker les fuseaux horaires? Comment feriez-vous pour acquérir des fuseaux horaires pour les enregistrements d'adresse existants?
J'utilise Microsoft SQL Server, .net mvc, C #. Toutes les suggestions seraient grandement appréciées.
database
database-design
time
Rodney
la source
la source
Réponses:
Vous souhaitez stocker quelque chose qui ne change pas tout le temps (ou deux fois par an). La base de données de fuseaux horaires https://en.wikipedia.org/wiki/List_of_tz_database_time_zones est exactement la bonne chose. Il vous suffit donc de stocker deux lettres.
À partir de cette base de données, vous pouvez demander le décalage horaire et le moment où l'heure d'été est active. Ce n'est pas seulement le décalage horaire, il vous donne également une zone, de nombreux endroits à la même latitude auront des codes différents et peuvent modifier individuellement leurs règles de fuseau horaire, et votre logiciel sera en mesure de les gérer.
Le seul moment où vous devez apporter des modifications à votre base de données est lorsqu'un emplacement change à quel fuseau horaire il appartient, ce qui serait très rare.
la source
La meilleure pratique absolue serait d'utiliser une base de données qui prend en charge le
TIMESTAMP WITH TIMEZONE
type de données défini par SQL99.SQL Server a un type appelé
datetimeoffset
qui fait tout ce qu'ilTIMESTAMP WITH TIMEZONE
peut faire sauf stocker le fuseau horaire réel. Tout ce que vous pouvez faire est de stocker un décalage par rapport à l'UTC (par exemple,2013-05-04 12:34:56 -5:00
), ce qui signifie que vous devrez le déterminer avant le stockage en fonction du fuseau horaire.la source
En supposant que vous utilisez .Net Framework 4.0 ou supérieur, TimeZoneInfo est ce dont vous avez besoin.
Stockez toutes les valeurs de date dans la base de données au format UTC. Utilisez la valeur d'ID ou le résultat de ToSerializedString () pour chaque client pour créer un objet TimeZoneInfo pour convertir les dates stockées au format local pour l'affichage.
la source
Vous avez dit que vous souhaitez stocker un fuseau horaire pour chaque adresse dans votre base de données, mais vous n'avez pas dit ce que vous voulez en faire. Stocker quelque chose dans une base de données est rarement une fin en soi.
Dans tous les cas, je chercherais à utiliser la base de données TZ , alias la base de données Olsen, soit directement, soit en utilisant un logiciel standard qui intègre TZ. Vous pouvez stocker un fuseau horaire simplement sous la forme d'une chaîne pour faire référence à l'une des entrées TZ DB , par exemple 'Africa / Kampala' ou 'Europe / Paris'.
la source