Question

Je dois enregistrer dans une base de données les règles de basculement de l'heure d'été (différentes heures du monde) pour différentes régions du monde. J'ai déjà un moyen de stocker des régions et des sous-régions (donc l'ensemble du Le problème "la moitié de l'Australie" / Arizona / Navaho est pris en charge), mais je me demande quel serait le schéma le plus efficace pour y parvenir. Les deux options telles que je les vois:

  • Avoir un tableau contenant une ligne unique pour chaque année et région, indiquant les heures de début et de fin pour l’été ainsi que le décalage spécifique
  • Avoir un tableau qui stocke une formule et une plage de dates effectives pour chaque région (plage effective requise pour des régions comme Israël)

L’avantage du premier est la souplesse, puisque tout est littéralement possible. Malheureusement, cela nécessite aussi (a) plus d’espace, et par conséquent (b) beaucoup de travail pour obtenir les données. La seconde est intéressante car une ligne peut correspondre à une région pendant des décennies, mais elle nécessite également un analyseur et un interpréteur de langue dans la couche application. Étant donné que cette base de données sera utilisée par plusieurs applications différentes écrites dans des langues dépourvues de puissantes capacités de traitement de texte, je préférerais éviter cette voie.

J'aimerais bien utiliser zoneinfo ou quelque chose du genre, mais malheureusement ce n'est pas une option dans ce cas. De même, je ne peux pas normaliser les dates, le fuseau horaire et l’heure d’été. Les informations doivent figurer dans la base de données pour satisfaire certains cas d'utilisation.

Quelqu'un a-t-il déjà fait quelque chose de similaire? De même, y a-t-il des options brillantes que j'ai peut-être ratées?

Était-ce utile?

La solution

Vous êtes à peu près condamné à la première option. Vous pouvez pré-générer des dates aussi longtemps que vous le souhaitez pour les pays dotés de " règles " concernant les changements d’heure, mais certaines régions n’ont pas de règle et les modifications sont adoptées soit par décret dictatorial, soit par vote législatif chaque année (le Brésil l’a fait jusqu’à cette année).

C’est la raison pour laquelle tous les fournisseurs de systèmes d’exploitation déploient les modifications de fichier de fuseau horaire une ou deux fois par an - ce qu’ils doivent faire, car ils ne peuvent pas générer un fichier précis à 100% par programmation.

Autres conseils

Si les règles DST doivent figurer dans la base de données, je choisirais probablement de les mettre à jour automatiquement à partir d'une source faisant autorité externe (bibliothèque, site Web, etc.). Maintenir manuellement les règles DST ne semble pas très amusant.

L'une des meilleures sources d'informations sur les règles de fuseau horaire est la base de données Olson, disponible à l'adresse . elsie.nci.nih.gov . En septembre 2008, la version actuelle des données était tzdata2008f.tar.gz, la version actuelle du code était tzcode2008e.tar.gz (et oui, le code n'était pas toujours publié à la date des données). Cela tend à être la source d'informations pour de nombreux autres systèmes (y compris, en particulier, les informations Oracle). Une liste de diffusion est également disponible. Comme vous pouvez le constater, il existe six versions des données à ce jour en 2008; J'ai des copies de 2005r, 2006l, 2007k cachées sur ma machine, donc les choses peuvent changer assez souvent.

De nos jours (mars 2017), la base de données Olson est disponible auprès de IANA & # 8212; voir https://iana.org/time-zones et ftp://ftp.iana.org/tz (en particulier ftp://ftp.iana.org/tz/releases ).

Il existe également le CLDR du référentiel de données locales communes qui contient également des informations sur les fuseaux horaires.

Le SGBD Oracle gère automatiquement cela pour vous. La date est stockée dans une représentation interne (imaginons UMT pour l’argument) et est formatée selon les règles du fuseau horaire lorsqu’elle est convertie en chaîne.

Ceci résout également la discussion sur ce qu'il faut faire pendant le changement au fil du temps. C'EST À DIRE. Lorsque vous faites reculer l’horloge d’une demi-heure, il y a en fait deux instances de 3 h 25 le même jour.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top