0

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

null
    • UweG
    • vor 2 Monaten
    • Gemeldet - anzeigen
    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;
    
      • Martin_Sundermann
      • vor 2 Monaten
      • Gemeldet - anzeigen

       Vielen Dank, das schaue ich mir mal an. Martin

    • mirko3
    • vor 2 Monaten
    • Gemeldet - anzeigen

    oder...

    let sowi := format(Datum, "Z");
    if sowi = "+01:00" then
        datetime(Datum, Zeit)
    else
        datetime(Datum, Zeit - time(1,0))
    end
    
      • Martin_Sundermann
      • vor 2 Monaten
      • Gemeldet - anzeigen

       Moin, ich versteh das nicht ganz. Was bedeutet "Z" in dem Format-Befehl?

      • mirko3
      • vor 2 Monaten
      • Gemeldet - anzeigen

       Hallo Martin. Das "Z" gibt Dir die Zeitzone Deines Datumeintrags wieder. Also zur  Sommerzeit +02:00 und zur Winterzeit +01:00 für die Eurozone. D.h., daß Ninox für Dich erkennt, wann die Umstellung erfolgt. In der Doku findest du alle Attribute für den Formatbefehl für Zahlen, Datum und Datum-Uhrzeit. Damit wird Dein Datum-Uhrzeit-Feld stets MEZ (Mitteleuropäische Zeit) anzeigen und nicht MESZ (Mitteleuropäische Sommerzeit). Mirko

      • Martin_Sundermann
      • vor 2 Monaten
      • Gemeldet - anzeigen

       Danke, das habe ich nicht gewusst, man lernt doch immer dazu!

Content aside

  • vor 2 MonatenZuletzt aktiv
  • 6Antworten
  • 68Ansichten
  • 3 Folge bereits