Autor Thema: Zur Info: @Zone() und die Locale  (Gelesen 1777 mal)

Offline m3

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.102
  • Geschlecht: Männlich
  • Non ex transverso sed deorsum!
    • leyrers online pamphlet
Zur Info: @Zone() und die Locale
« am: 10.04.08 - 13:56:55 »
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.

Klare Sache, um die Zeitzone auszugeben reicht ein
Code
@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:
Code
@Replace(@Zone(@Now()); "-1.1":"-1,1":"-1"; "MESZ":"MESZ":"MEZ")
.
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")
.

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. :)
HTH
m³ aka. Martin -- leyrers online pamphlet | LEYON - All things Lotus (IBM Collaborations Solutions)

All programs evolve until they can send email.
Except Microsoft Exchange.
    - Memorable Quotes from Alt.Sysadmin.Recovery

"Lotus Notes ist wie ein Badezimmer, geht ohne Kacheln, aber nicht so gut." -- Peter Klett

"If there isn't at least a handful of solutions for any given problem, it isn't IBM"™ - @notessensai

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz