Il est tentant de croire qu'une fois que vous connaissez le fuseau horaire d'un pays, vous le connaissez pour toujours. En pratique, les gouvernements modifient leur politique en matière de fuseau horaire plus souvent qu'on ne le pense. Un pays peut décider d'abandonner l'heure d'été après l'avoir appliquée pendant des décennies. Un autre peut décaler son heure légale d'une heure pour s'aligner davantage sur un grand partenaire commercial. Un grand pays peut redessiner la frontière interne entre deux de ses fuseaux au gré des changements d'administration régionale. Aucune de ces catégories n'est hypothétique. Des changements de ce genre se produisent quelque part dans le monde de façon assez régulière, même si un pays donné peut passer des années ou des décennies sans en connaître.
C'est précisément le problème que la base de données des fuseaux horaires IANA a pour mission de résoudre. Plutôt que de stocker un seul décalage actuel par pays, elle suit chaque fuseau nommé comme un historique de règles au fil du temps, avec de nouvelles entrées ajoutées chaque fois qu'un gouvernement annonce un changement. Un logiciel qui s'appuie sur une copie maintenue et régulièrement mise à jour de cette base intègre les changements sans aucune modification de son propre code. Un logiciel qui code en dur les décalages par pays, par exemple dans une table de correspondance écrite une fois pour toutes lors du développement initial, deviendra discrètement faux la prochaine fois qu'un des pays couverts modifiera ses règles, et la panne ne se signalera pas. Il se mettra simplement à renvoyer des heures locales incorrectes pour ce pays jusqu'à ce que quelqu'un s'en aperçoive.
C'est aussi pour cela que stocker uniquement un décalage UTC, sans nom de fuseau associé, est risqué pour toute donnée destinée à servir plus de quelques mois. Un décalage relevé aujourd'hui est l'instantané d'une règle susceptible de changer. Un nom de fuseau comme Pacific/Auckland ou Asia/Kolkata renvoie à l'ensemble de règles maintenu : tant que la base sous-jacente est tenue à jour, les calculs effectués à partir de ce nom restent corrects même après un changement de règle, sans que vous ayez à toucher à vos propres données.
La recommandation pratique pour quiconque s'appuie sur des données de fuseau horaire est simple. Stockez des noms de fuseaux, et non des décalages bruts, dans votre propre base de données. Mettez à jour à un rythme raisonnable la bibliothèque ou la source de données de fuseaux horaires dont vous dépendez, car une copie obsolète se comporte exactement comme une table codée en dur dès qu'un pays couvert modifie ses règles. Et considérez une recherche de fuseau horaire comme un appel à refaire pour les calculs liés à des dates réelles et changeantes, plutôt que comme une valeur à mettre en cache indéfiniment.
Notre recherche de fuseau horaire renvoie le nom de fuseau IANA et le décalage actuels pour n'importe quelle coordonnée, calculés à partir d'un ensemble de règles maintenu plutôt que d'une table statique, ce qui est le seul moyen de rester correct à mesure que les pays ajustent leurs propres règles au fil du temps.
Une adresse dans un centre-ville bien cartographié ne vous apprend presque rien sur la façon dont votre système gère une route rurale, une frontière contestée ou une requête près des pôles. Testez délibérément les cas difficiles.
Tous les jeux de données contenant des informations de localisation apparemment publiques ne peuvent pas légalement être utilisés dans un produit payant. Ce sont souvent les conditions de licence, et non la disponibilité technique, qui fixent la véritable limite.
Lorsqu'une requête ne peut réellement pas être résolue de manière fiable, ne rien renvoyer est une meilleure réponse que renvoyer une supposition présentée comme un fait. Voici le raisonnement derrière ce choix.