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 (http://publib-b.boulder.ibm.com/lotus/c2359850.nsf/2e73cbb2141acefa85256b8700688cea/4101c145a6c052178525731b004971cc?OpenDocument) (6.5 bis inkl. 8.0) sollte sie eigentlich die Zeitzone (http://de.wikipedia.org/wiki/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 (http://de.wikipedia.org/wiki/Punkt_%28Satzzeichen%29)" (Period (http://en.wikipedia.org/wiki/Full_stop)) sondern das Dezimaltrennzeichen (http://de.wikipedia.org/wiki/Dezimaltrennzeichen) der aktuellen Locale (http://de.wikipedia.org/wiki/Locale). Also unter einem deutschen Windows, oder wenn man auf eine Webanwendung mit einem deutsch konfigurierten Browser ansurft einen Beistrich/Komma (http://de.wikipedia.org/wiki/Komma#Mathematik), 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 (http://en.wikipedia.org/wiki/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. :)