Zweimal im Jahr zittern alle Programmierer von Datumsfunktionen -- einmal am letzten Sonntag des Monats März und das zweite Mal am letzten Sonntag des Monats Oktober. Beim Wechsel von Sommer- auf Normalzeit oder vice versa zeigt sich zumeist, ob man sauber programmiert hat, oder nicht.
Diesen März hat es (indirekt) auch mich getroffen. Anstelle von
13:28:08 MESZ zeigte eine Anwendung von uns nur mehr
13:28:08 -1.1. Gruml. Nichts tragisches aber trotzdem nervend.
Die Ursache war schnell gefunden. Die @Zone() Funktion von Lotus Notes/Domino. Laut
Designer-Hilfe (6.5 bis inkl. 8.0) sollte sie eigentlich die
Zeitzone, gefolgt von einem Punkt, gefolgt von einem Sommerzeit-Flag zurück geben. Wörtlich:
Return value: zoneNumber.dstFlag
The time zone, followed by a period, followed by a flag indicating daylight-saving time.
Klare Sache, um die Zeitzone auszugeben reicht ein
@Replace( @Zone(@Now); "-1.1":"-1"; "MESZ":"MEZ")
und ich hab meine Zeitzone im Klartext. Nene, so einfach ist das leider nicht. Die Designer-Hilfe ist in diesem Fall leider nicht korrekt.
@Zone verwendet nämlich in Wahrheit als Trenner nicht den "
Punkt" (
Period) sondern das
Dezimaltrennzeichen der aktuellen
Locale. Also unter einem deutschen Windows, oder wenn man auf eine Webanwendung mit einem deutsch konfigurierten Browser ansurft einen Beistrich/
Komma, bei einem englischen Browser oder Windows aber den Punkt. Da war für den Doku-Schreiber/Programmierer anscheinend die USA wieder mal die Welt.
Nachdem meine Anwendung im Jänner neu war, haben wir sie natürlich nie in der Sommerzeit getestet, also schlug der das @Replace nie fehl, weil @Zone() nie das Sommerzeitflag zurücklieferte. Aber jetzt hats BUMM gemacht. Zum Glück ist die "Behebung" recht einfach:
@Replace(@Zone(@Now()); "-1.1":"-1,1":"-1"; "MESZ":"MESZ":"MEZ")
.
Wobei man eigentlich den
Momayyez auch noch berücksichtigen müsste:
@Replace(@Zone(@Now()); "-1٫1":"-1.1":"-1,1":"-1"; "MESZ":"MESZ":"MESZ":"MEZ")
.
Ich hab mir gedacht ich dokumentier das mal, eventuell stolpert ja noch wer drüber. Einen SPR hab ich dafür auch bekommen: #SCT7DHJEE. Mal schaun, ob sie den Code reparieren oder einen "Documentation Fix" machen.