Autor Thema: Unerwartetes Ergebnis im Umgang mit Zeiten  (Gelesen 1672 mal)

Offline Werner Götz

  • Aktives Mitglied
  • ***
  • Beiträge: 248
  • Geschlecht: Männlich
Unerwartetes Ergebnis im Umgang mit Zeiten
« am: 21.10.18 - 11:51:31 »
Ich bin diese Tage über ein auf den ersten Blick fehlerhaftes Verhalten bzgl. Umgang beim Rechnen mit Zeitwerten gestolpert.

Den Fehler habe ich mit Lotusscript (NotesDateTime::AdjustDay) festgestellt, aber in der Formelsprache kann das Ganze genauso nachgestellt werden.

zeitangabe wird in der Formel auf "29.10.2016 10:02:23" gesetzt. Als Ergebnis der Formel
Code
zeitangabe := @Date(2016; 10; 29; 10; 2; 23);
@Adjust(zeitangabe ; 0; 0; 1; 0; 0; 0)
würde ich also "30.10.2016 10:02:23" erwarten. Tatsächlich liefert die Formel aber "30.10.2016 09:02:23"!

Bei der ursprünglichen Codestelle war das sogar noch etwas verwirrender:
Beim Ausgangswert "30.10.2016 00:00:00" liefert das Aufaddieren von 1 Tag den Wert "30.10.2016 23:00:00". Und weil ich in meinem Code etwas tageweise berechnet habe und nach dem Aufaddieren von 1 Tag den Zeitanteil ignoriert hatte, war das Ganze dann eine schöne Endlosschleife ;)

Auf den ersten Blick handelt es sich hier also um einen klaren Fehler.
(UPDATE: Es ist natürlich klar, dass an diesem Tag die Zeit umgestellt wurde. Aber man addiert ja schließlich einen ganzen Tag auf ...)

Wenn man sich aber natürlich vor Augen führt, dass Notes ja intern auf GMT umrechnet und in die lokale Präsentation umrechnet, dann ist das natürlich richtig so. Denn wenn man auf die GMT den Tag aufaddiert und dann wieder in die lokale Zeit zurückrechnet, dann ergibt sich genau dieses Ergebnis.
ABER: Das würde doch niemand so erwarten?

Nun haben wir es aber mit Notes zu tun, und da gibt es für sowas meist / oft auch eine Lösung.
Und siehe da: sowohl AdjustDay als auch @Adjust kennen einen Parameter, der sich um die Problematik "Zeitumstellung" kümmert.

Man muss also nur
   zeitangabe.AdjustDay(1, True)
bzw. in der Formelsprache
   @Adjust(zeitangabe ; 0; 0; 1; 0; 0; 0; [INLOCALTIME] )
verwenden und schon bekommt man das richtige Ergebnis.

Viele Grüße
-Werner
« Letzte Änderung: 22.10.18 - 08:56:38 von Werner Götz »

Offline Tode

  • Moderatoren
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 6.883
  • Geschlecht: Männlich
  • Geht nicht, gibt's (fast) nicht... *g*
Re: Unerwartetes Ergebnis im Umgang mit Zeiten
« Antwort #1 am: 21.10.18 - 20:01:24 »
Schonmal was von 3, -1, 1, 10, -1, 1 gehört?

Ich sage nur: DSTLaw...
Der 30.10.2016 war der letzte Sonntag im Oktober... das heisst: die Rechnung ist korrekt, weil dazwischen die Uhr eine Stunde zurückgestellt wurde...
Gruss
Torsten (Tode)

P.S.: Da mein Nickname immer mal wieder für Verwirrung sorgt: Tode hat NICHTS mit Tod zu tun. So klingt es einfach, wenn ein 2- Jähriger versucht "Torsten" zu sagen... das klingt dann so: "Tooode" (langes O, das r, s und n werden verschluckt, das t wird zum badischen d)

Offline Werner Götz

  • Aktives Mitglied
  • ***
  • Beiträge: 248
  • Geschlecht: Männlich
Re: Unerwartetes Ergebnis im Umgang mit Zeiten
« Antwort #2 am: 22.10.18 - 07:44:45 »
@Tode: Dass das mit der Winterzeitumstellung zu tun hat war natürlich klar, trotzdem dachte ich, dass das auch für andere interessant sein könnte.

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz