Domino 9 und frühere Versionen > ND7: Entwicklung

Zur Info: @Zone() und die Locale

(1/1)

m3:
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:
--- Zitat ---Return value: zoneNumber.dstFlag
The time zone, followed by a period, followed by a flag indicating daylight-saving time.
--- Ende Zitat ---

Klare Sache, um die Zeitzone auszugeben reicht ein
--- Code: ---@Replace( @Zone(@Now); "-1.1":"-1"; "MESZ":"MEZ")
--- Ende Code ---
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:
--- Code: ---@Replace(@Zone(@Now()); "-1.1":"-1,1":"-1"; "MESZ":"MESZ":"MEZ")
--- Ende Code ---
.
Wobei man eigentlich den Momayyez auch noch berücksichtigen müsste: 
--- Code: ---@Replace(@Zone(@Now()); "-1٫1":"-1.1":"-1,1":"-1"; "MESZ":"MESZ":"MESZ":"MEZ")
--- Ende Code ---
.

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. :)

Navigation

[0] Themen-Index

Zur normalen Ansicht wechseln