Frage

Ich brauche die Sommerzeit (Sommerzeit) Umschaltkontakt Regeln für verschiedene Regionen der Welt in einer Datenbank zu speichern. Ich habe bereits eine Art von Speicherbereichen und Teilregionen (so die ganze „half of Australia“ / Arizona / Navaho Problem ist gesorgt), aber ich frage mich, was die effizienteste Schema wäre dies zu erreichen. Die beiden Optionen, wie ich sehe sie:

  • Haben Sie eine Tabelle, die für jedes Jahr und Region gibt die Start- und Endzeiten für die Sommerzeit sowie die spezifische Offset
  • einzigartig eine Zeile enthält
  • Haben Sie eine Tabelle, die für jede Region (effektive Reichweite benötigt für Regionen wie Israel)
  • eine Formel und effektive Datumsbereich speichert

Der Vorteil der ersten ist die Flexibilität, da buchstäblich alles ist möglich. Leider ist es erfordert auch (a) mehr Platz, und entsprechend (b) eine Menge Arbeit, um die Dateneingabe zu erhalten. Die zweite ist schön, weil eine Zeile auf eine Region seit Jahrzehnten entsprechen könnte, aber es erfordert auch eine Art von Sprache Parser und Interpreter in der Anwendungsschicht. Da diese Datenbank ohne leistungsstarke Textverarbeitungsfunktionen in Sprachen geschrieben von mehreren verschiedenen Anwendungen eingesetzt wird, würde ich lieber diesen Weg vermeiden.

Ich würde gerne nur verwenden, zoneinfo oder so etwas, aber leider in diesem Fall, das ist keine Option. Ebenso kann ich die Termine nicht normalisieren, Zeitzone und Sommerzeit info muss in der Datenbank sein, bestimmte Anwendungsfälle zu erfüllen.

Hat jemand keine Erfahrung hat, etwas zu tun ähnlich? Ebenso hat jemand irgendwelche brillanten Optionen, die ich verpasst haben?

War es hilfreich?

Lösung

Sie sind so ziemlich auf die erste Option zum Scheitern verurteilt. Sie können Termine vorge erzeugen so weit voraus, wie Sie für Länder wollen die „Regeln“ in Bezug auf Zeit Änderungen haben, aber einige Bereiche haben keine Regel und die Änderungen in Kraft gesetzt werden entweder durch diktatorische fiat oder durch gesetzliche Abstimmung jährlich (Brasilien tat so, bis in diesem Jahr).

Aus diesem Grunde all OS-Anbieter Änderungen Zeitzone Datei einmal ausrollen oder zweimal im Jahr - sie müssen, weil sie eine 100% genaue Datei programmatisch nicht erzeugen können,

.

Andere Tipps

Wenn die DST-Regeln in der Datenbank sein muss, würde ich wahrscheinlich wählen, um sie automatisch von einer externen maßgeblichen Quelle zu aktualisieren (Bibliothek, Website, was auch immer). Manuell Aufrechterhaltung DST-Regeln klingt nicht wie viel Spaß.

Eine der besten Quellen für Informationen über Zeitzone-Regeln ist die Olson-Datenbank, die von elsie.nci.nih.gov . Im September 2008 war die aktuelle Version der Daten tzdata2008f.tar.gz, die aktuelle Version des Codes war tzcode2008e.tar.gz (und ja, wurde der Code nicht immer freigegeben, wenn die Daten sind). Dies tendiert dazu, die Informationsquelle für viele andere Systeme (einschließlich insbesondere der Oracle Informationen) zu sein. Es gibt eine Mailing-Liste zur Verfügung, auch. Wie Sie sehen können, gibt es im Jahr 2008 bisher sechs Versionen der Daten gewesen; Ich habe Kopien von 2005r, 2006l, 2007k lauere auf meinem Rechner, so Dinge ziemlich oft ändern.

Heute (März 2017), ist die Olson-Datenbank von IANA erhältlich - siehe https://iana.org/ Zeitzonen und ftp://ftp.iana.org/tz (insbesondere < a href = "ftp://ftp.iana.org/tz/releases" rel = "nofollow noreferrer"> ftp://ftp.iana.org/tz/releases ).

Es gibt auch die Common Locale Data Repository CLDR , die zu Informationen über Zeitzonen hat.

Die Oracle DBMS automatisch erledigt dies für Sie. Das Datum wird in einer internen Darstellung gespeichert (kann aus Gründen des Arguments UMT vorstellen) und wird nach den Regeln der Zeitzone formatiert, wenn in einen String umgewandelt.

Das löst auch das Argument, über das, was während der Änderung im Laufe der Zeit zu tun. I.E. wenn Sie die Uhr zurück 1/2 Stunde dort rollen tatsächlich zwei Instanzen von 03.25 am selben Tag.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top