En règle générale, la meilleure pratique consiste à stocker le temps en UTC et, comme indiqué dans le document aquí y aquí .
Supposons qu'il existe un événement récurrent, par exemple l'heure de fin, qui est toujours à la même heure locale, par exemple 17:00, que l'heure d'été soit activée ou désactivée pour ce fuseau horaire. Il est également nécessaire de ne pas modifier l'heure manuellement lorsque l'heure d'été est activée ou désactivée pour un fuseau horaire donné. Il est également nécessaire que lorsque l'heure de fin est demandée par un autre système via l'API (c'est-à-dire GetEndTimeByEvent), il envoie toujours l'heure de fin au format UTC.
Approche 1 : S'il est décidé à stocker en UTC il peut être stocké dans la table de la base de données comme ci-dessous.
Event UTCEndTime
=====================
ABC 07:00:00
MNO 06:00:00
PQR 04:00:00
Pour le premier événement ABC, l'heure de fin en UTC est 07h00, ce qui, si l'on convertit l'affichage de l'UTC à l'heure locale le 1er juillet 2012, donnera 17h00 heure locale et, si l'on convertit le 10 octobre 2012 (date à laquelle l'heure d'été est activée pour le fuseau horaire), donnera 18h00, ce qui n'est pas l'heure de fin correcte.
Une solution possible serait de stocker l'heure d'été dans la colonne supplémentaire et d'utiliser cette heure lorsque le fuseau horaire est activé.
Approche 2 : Toutefois, s'il est enregistrée comme heure locale comme ci-dessous, par exemple pour l'événement ABC, il sera toujours 17:00 à n'importe quelle date, car il n'y a pas de conversion de l'heure UTC à l'heure locale.
Event LocalEndTime
=======================
ABC 17:00:00
MNO 16:00:00
PQR 14:00:00
Une couche applicative convertit l'heure locale en heure UTC pour l'envoyer à d'autres systèmes (API GetEndTimeByEvent).
Est-ce toujours une bonne idée de stocker l'heure en UTC dans ce cas ? Si oui, comment obtenir une heure locale constante ?
Questions connexes : Y a-t-il jamais une bonne raison de stocker l'heure autrement qu'en UTC ?