Wieder einmal: Winterzeit-Sommerzeit
Moin,
ich habe an verschiedenen Stellen im Forum schon von den Sommerzeit-Problemen in Ninox gehört, die jeweils angebotenen Lösungen kamen irgendwie für mich nicht in Frage.
Also: Ich habe ein Datumsfeld "Datum" und ein Uhrzeitfeld "Zeit".
Ich will nun mit der Funktion datetime einen Zeitstempel erstellen:
datetime(Datum, Zeit).
Das funktioniert, wenn der Wert von "Datum" innerhalb der Winterzeit (also in diesem Jahr vor dem 31.3.24) liegt. Wenn "Datum" aber 31.3.24 oder später ist, wird im Zeitstempel die Uhrzeit um 1 Stunde erhöht.
Es ist mir klar, dass das mit der Zeitumstellung zu tun hat. Aber wie umgehe ich das? Ich könnte vielleicht eine if Schleife einbauen (wenn "Datum" größer 30.3., dann "Uhrzeit" eine Stunde weniger), aber das ist ja nicht besonders elegant, und müsste ja in jedem Jahr geändert werden.
Vielen Dank für Hinweise
Martin
6 Antworten
-
function timeChange(myDaTi : datetime) do let myDat := date(myDaTi); let myY := year(myDaTi); let myTime := number(time(myDaTi)); " Jetzt ermittle ich den Wochentag des 1. April des Jahres, der Sonntag vor dem 1. April der Tag der Zeitumstellung ist. "; let myWeekdaySom := weekday(date(myY, 4, 1)); " Ich berechne die Anzahl der Tage, die ich vom 1. April zurückgehen muss, um den Sonntag davor zu bekommen. "; let myDaySom := -myWeekdaySom; " Dann lege ich den genauen Zeitstempel (um 2 Uhr morgens) für die Zeitumstellung in diesem Jahr fest. "; let mySumTimChange := datetime(myY, 4, myDaySom, 2, 0); " In den nächsten drei Zeilen mache ich das Gleiche wie oben, nun für die Zeitumstellung im Herbst. "; let myWeekdayWint := weekday(date(myY, 11, 1)); let myDayWint := -myWeekdayWint; let myWintTimeChange := datetime(myY, 11, myDayWint, 2, 0); " Jetzt prüfe ich, ob das angegebene Datum+Uhrzeit im Winter oder in der Sommerzeit liegt. Je nach Ergebnis subtrahiere ich eine oder zwei Stunden von der Zeit. "; if myDaTi < mySumTimChange or myDaTi >= myWintTimeChange then datetime(myDat, myTime - 3600000) else datetime(myDat, myTime - 7200000) end end;
-
oder...
let sowi := format(Datum, "Z"); if sowi = "+01:00" then datetime(Datum, Zeit) else datetime(Datum, Zeit - time(1,0)) end
Content aside
- vor 11 MonatenZuletzt aktiv
- 6Antworten
- 89Ansichten
-
3
Folge bereits