Seite 1 von 1
Gelöst - kein Bug: Bug in Date()
Verfasst: 10.02.2025 15:53
von margro
Hallo Fans von PB,
mir ist in der Date()-Bibo etwas mysteriöses aufgefallen:
Wenn ich zum 01.01.1901 vier Tage hinzu addiere, dann wird mir der 10.02.2037 angezeigt:
Code: Alles auswählen
date = Date(1901, 1, 1, 0, 0, 0)
Debug FormatDate("%dd.%mm.%yyyy", AddDate(date, #PB_Date_Day, 4))
Stelle ich das Jahr 1902 ein, dann komme ich richtigerweise auf den 05.01.1902.
Könnt Ihr das so reproduzieren?
Ich arbeite mit PB 6.12 32-Bit unter Windows 11 x64.
// Verschoben aus "Bugs" zu "Allgemein" (Kiffi)
Re: Bug in Date()
Verfasst: 10.02.2025 16:54
von margro
Das Problem scheint gelöst: Für Integer einfach Quad angeben (date.q)!
Re: Bug in Date()
Verfasst: 10.02.2025 17:25
von Macros
Exakt. steht auch so in der Hilfe:
Code: Alles auswählen
Datumswert.q = Date([Jahr, Monat, Tag, Stunde, Minute, Sekunde])
Als kurze Erklärung: Man hat sich irgendwann man darauf geeinigt die Unix Zeit zu verwenden. Sekunden ab dem 01.01.1970.
Deine Zuweisung sieht also in etwa so aus:
Eine 32 bit Integer (long) geht aber nur bis -2147483648 (siehe Hilfe)
Du hast also einen Overflow, und kommst damit auf wieder auf einen positiven 32 bit Wert. (2037 ist nahe am gefürchteten Jahr 2038, wo die obere Grenze ist) Mit der Quad bist du das Problem los, weil der Zahlenbereich viel größer ist.
Zwei Tipps:
- Rückgabetypen sind wichtig, immer einen Moment überlegen ob der Variablentyp oder der Rückgabetyp bei einer eigenen Prozedur passt.
- Man neigt sehr flott dazu ein Problem auf einen Bug zu schieben, wenn man sich mal verrannt hat. Das musste ich mir erst beibringen dann lieber noch 3 mal zu schauen, oder Rubberducky Debugging anzuwenden (Dadurch kann meine Frau nun auch programmieren

). Auch wenn es natürlich manchmal doch ein echter Bug ist.
Aber super wie schnell du die Lösung selbst gefunden hast

Re: Bug in Date()
Verfasst: 10.02.2025 18:41
von NicTheQuick
Warum nutzt du überhaupt Purebasic in der 32-Bit-Version, wenn heutzutage nirgends mehr ein 32-Bit Windows genutzt wird.
(Ausgenommen im industriellen Umfeld vielleicht, wo immer noch Windows-Leichen in Verwendung sind)
Re: Bug in Date()
Verfasst: 10.02.2025 20:52
von margro
Hallo Macros, vielen Dank für die tolle Erklärung!
Hallo NicTheQuick, ich weiß es selber nicht mehr so genau, weil ich von Anbeginn die 32er Version nutze und die damit erstellten Anwendungen auch auf 64er Systemen laufen. Aber Du hast mich auf jeden Fall dazu angeregt, mal über einen Wechsel zur 64er Version nachzudenken - ich werde es mal testen.
Re: Bug in Date()
Verfasst: 11.02.2025 00:16
von mk-soft
Denk aber daran das bei x64 alte Codes die Variablen für Handle, Pointer und ID's von Long (.l) auf Integer (.i) umzustellen.
Re: Bug in Date()
Verfasst: 11.02.2025 20:20
von margro
Danke für den Hinweis, mk-soft! Wer noch was beisteuern kann - immer her damit!