Datum aus NTP-Datenpaket berechnen

Das mittlere Jahr hat nämlich nicht 365,25 Tage sondern nur ca. 365,2425 Tage.

??

Das uint32_t Ergebnis sind die Anzahl Sekunden seit 1.1.1970 0:00:00 UTC, die sogenannte unix-Zeit.

Da hat jeder Tag genau 86400 Sekunden und die Schaltjahr-Regelung, incl. Sonderfall im Jahr 2000, wird beachtet.
Schaltsekunden gibt es nicht. Jede Zahl, die ohne Rest durch 86400 teilbar ist, fängt einen neuen Tag mit genau 24 Stunden an.

michael_x:
Das uint32_t Ergebnis sind die Anzahl Sekunden seit 1.1.1970 0:00:00 UTC, die sogenannte unix-Zeit.

Welches Ergebnis meinst du? Das was er über NTP bekommt ist die Zeit nach 1.1.1900

michael_x:
Da hat jeder Tag genau 86400 Sekunden und die Schaltjahr-Regelung, incl. Sonderfall im Jahr 2000, wird beachtet.
Schaltsekunden gibt es nicht. Jede Zahl, die ohne Rest durch 86400 teilbar ist, fängt einen neuen Tag mit genau 24 Stunden an.

Ja, der Tag hat genau 86400 Sekunden, aber das Jahr hat nicht durchschnittlich 365,25 Tage wie in seinem Algoritmus angegeben ist (Umgerechnet in einen Sekundenwert). Wir haben nämlich nicht alle 4 Jahre ein Schaltjahr, da gibt es Ausnahmen (zB das Jahr 1900 weil es durch 100 teilbar ist und nicht durch 400).
Er muss in seinem Algo also wahrscheinlich diese beiden Schaltjahrregeln noch dazu programmieren damit das Ergebnis stimmt.

Praktisch ist, dass die 32 bit Unix-Zeit nur von 1970 bis 2038 gilt. Der einzige Jahrhundert-Wechsel in dieser Zeit war aber ein Schaltjahr.

Eine Division durch 365.25 ist genauso Mist wie durch 365.2425 oder jede andere float Operation. Die ich aber nicht sehe.

Ob eine der vielen magischen Konstanten falsch ist, keine Ahnung. Ist mir zu mühsam. Die richtige Berechnung kann man finden.

Wie kommst du denn andauernd auf die Unix-Zeit? Er liest doch die Zeit über einen NTP Server. Und da kommt die als Sekunden nach dem 1.1.1900 zurück und nicht als Unix-Zeit.
Und da somit das Jahr 1900 in der Zeitspanne drinsteckt und es kein Schaltjahr war obwohl es durch 4 teilbar ist, ist sein Ergebnis falsch.

Übrigens dividiert er nirgens durch 365,25. Das hat keiner behauptet. Er benutzt diese Zeitspanne in Sekunden. So umgerechnet: 365,25 * 86400 = 31557600UL

Die beiden Sachen stehen übrigens gut lesbar in seinen Kommentaren:

// NTP-Zeitserver abfragen
// Gibt die Anzahl der Sekunden zurück, die seit dem 01.01.1900 vergangen sind

und

// Sekunden durchschnittliches Jahr (365,25 Tage): 31557600UL

Er muss doch praktisch nur im unteren Teil seines Codes an den if-Abfragen fürs Schaltjahr was korrigieren um das Problem zu beheben, so wie ich das sehe. Ich schreib ihm jetzt nicht den Code hier hin und werds auch nicht ausprobieren.
Für nen Quick-Fix behandelt er nur noch das Jahr 1900 als Ausnahme (weil kein Schaltjahr) für nen ordentlichen Fix programmiert er die Schaltjahresregeln für Jahr%100 und Jahr%400 richtig in seine if-Abfragen rein (obwohl wahrscheinlich die wenigsten unter uns das Jahr 2100 erleben werden).

Gruß
Jarny

Jarny:
[...]
Und da somit das Jahr 1900 in der Zeitspanne drinsteckt und es kein Schaltjahr war obwohl es durch 4 teilbar ist, ist sein Ergebnis falsch.
[...]

Vielen Dank, Jarny.

Tatsächlich habe ich nicht beachtet, dass 1900 kein Schaltjahr war.
Der Code ist hinsichtlich dieser Tatsache korrigiert worden und funktioniert nun.

An deiner Antwort sollten sich die meisten Vorredner ein Beispiel nehmen.
Du hast meinen Post offensichtlich durchgelesen und das Problem erkannt und dann eine klare, lösungsorientierte Antwort gegeben.
Vielen Dank dafür!

AArduinoO:
Vielen Dank, Jarny.

Tatsächlich habe ich nicht beachtet, dass 1900 kein Schaltjahr war.
Der Code ist hinsichtlich dieser Tatsache korrigiert worden und funktioniert nun.

An deiner Antwort sollten sich die meisten Vorredner ein Beispiel nehmen.
Du hast meinen Post offensichtlich durchgelesen und das Problem erkannt und dann eine klare, lösungsorientierte Antwort gegeben.
Vielen Dank dafür!

Gern geschehen.

Trotzdem nochmal ein kurzes Schlußwort:
Die Leute hier im Forum machen einen sehr guten Job, auch wenn du das gerade nicht so siehst. Nur weil sich nicht jeder hier ausgiebig und länger mit deinem Problem beschäftigt und vielleicht erstmal Tipps gibt die evtl nicht sofort das Problem lösen, musst du dich ja nicht gleich über sie beschweren. Die Leute legen eine Schlagzahl an den Tag der beeindruckend und nicht selbstverständlich ist. Ob du mit deiner Art im echten Leben weit kommst weiß ich nicht. Aber die feine Art ist das meiner Meinung nach nicht.
Finde es aber trotzdem gut, dass du dich bedankt hast und Rückmeldung gegeben hast, dass es jetzt funktioniert. Auch das sieht man nicht immer in Foren.
Gruß
Jarny