CalendarGadget neues Datum nachträglich setzen

Anfängerfragen zum Programmieren mit PureBasic.
mbergmann_sh
Beiträge: 8
Registriert: 04.08.2022 15:50

CalendarGadget neues Datum nachträglich setzen

Beitrag von mbergmann_sh »

Hallo zusammen,

ich möchte unter PureBasic 6 einem CalendarGadget nachträglich ein anders Datum zuweisen. In meiner Anwendung wird das Gadget mit dem Tagesdatum (Default) geöffnet:

Code: Alles auswählen

 calGeburtsdatum = CalendarGadget(#PB_Any, 20, 220, 178, 160, 0, #PB_Calendar_Borderless)
- das Gadget zeigt erwartungsgemäß das Datum des heutigen Tages (4.8.2022).

Nun versuche ich, mein Geburtsdatum zuzuweisen:

Code: Alles auswählen

geburtsdatum = Date(1961,9,26,0,0,0)
SetGadgetState(calGeburtsdatum, geburtsdatum)
Tatsächlich ändert sich auch das Datum - heraus kommt dabei aber Unsinn. Anstatt den 26.09.1961 anzuzeigen, zeigt das Gadget nun den 7. Februar 2106 an. Was mache ich falsch - wie setze ich ein bestimmtes Datum in einem Calendargadget korrekt?

Besten Dank für Eure Hinweise!
Benutzeravatar
Kiffi
Beiträge: 10621
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: CalendarGadget neues Datum nachträglich setzen

Beitrag von Kiffi »

Aus der PB-Hilfe:
Die 'Date' (Datums) Bibliothek ermöglicht den Umgang mit Datums- und Zeitangaben zwischen 1970 und 2038. Benutzt wird dabei die Unix-32-Bit-Methode (d.h. die Anzahl der seit dem 1. Januar 1970 vergangenen Sekunden).

Hinweis: Unterstützte Datums-/Zeit-Werte sind 01.01.1970, 00:00:00 als Minimum und 19.01.2038, 03:14:07 als Maximum. Siehe auch https://de.wikipedia.org/wiki/Jahr-2038-Problem.
Mögliche Lösung Deines Problems: viewtopic.php?p=360707#p360707
Hygge
mbergmann_sh
Beiträge: 8
Registriert: 04.08.2022 15:50

Re: CalendarGadget neues Datum nachträglich setzen

Beitrag von mbergmann_sh »

Wow, ich check es nicht. Setze ich ein Datum ab dem 1.1.1970, so ist alles gut und funktioniert. Macht ja auch Sinn.
Gebe ich das Minimum des Gadgets mit

Code: Alles auswählen

SetGadgetAttribute(calGeburtsdatum, #PB_Calendar_Minimum, 1955)
an und setze danach einen Wert vor 1970, so kommt der selbe Unsinn heraus, den ich vorher auch hatte.
Benutzeravatar
jacdelad
Beiträge: 348
Registriert: 03.02.2021 13:39
Computerausstattung: Ryzen 5800X, 108TB Festplatte, 32GB RAM, Radeon 7770OC
Wohnort: Riesa
Kontaktdaten:

Re: CalendarGadget neues Datum nachträglich setzen

Beitrag von jacdelad »

Kein Unsinn. Im Prinzip werden Zeiteinheiten seit dem 1.1.1970 gezählt. Irgendwann gibt es einen Variablenüberlauf, dann fängt es wieder bei 0 an.
Wenn du ein Datum vor 1970 wählst passiert in etwa das gleiche, nur quasi rückwärts. Du bewegst dich außerhalb von 1970 und 2038 in ungültigen Wertebereichen, die die variable, in der das Datum gespeichert wird, nicht verarbeiten kann. Deswegen hatte Kiffi ja die Hilfe zitiert, in der steht genau drin, dass das Universum vor 1970 nicht existiert hat.
PureBasic 6.04/XProfan X4a/Embarcadero RAD Studio 11/Perl 5.2/Python 3.10
Windows 11/Ryzen 5800X/32GB RAM/Radeon 7770 OC/3TB SSD/11TB HDD
Synology DS1821+/36GB RAM/130TB
Synology DS920+/20GB RAM/54TB
Synology DS916+ii/8GB RAM/12TB
Benutzeravatar
jacdelad
Beiträge: 348
Registriert: 03.02.2021 13:39
Computerausstattung: Ryzen 5800X, 108TB Festplatte, 32GB RAM, Radeon 7770OC
Wohnort: Riesa
Kontaktdaten:

Re: CalendarGadget neues Datum nachträglich setzen

Beitrag von jacdelad »

Stell dir vor, das Datum würde in einem Byte gespeichert werden. Das Byte hat 256 Zustände. Du fängst mit dem 1. Januar an, das Byte hat den Wert 0. der 2. Januar wäre 1, der 3. Januar 2...
Der 13. September ist der 256. Tag des Jahres, also hätte unser Byte den Wert 255. Höher geht nicht. Am 14. September beginnt das Byte wieder von 0 an zu zählen. Jetzt wissen wir aber nicht mehr, ob es der 1. Januar oder der 14. September ist.
Dein Datum liegt außerhalb des Bereichs in dem das Datumsgadget arbeitet. Es weiß nicht mehr ob das Datum nach 2038 oder vor 1970 liegt.
PureBasic 6.04/XProfan X4a/Embarcadero RAD Studio 11/Perl 5.2/Python 3.10
Windows 11/Ryzen 5800X/32GB RAM/Radeon 7770 OC/3TB SSD/11TB HDD
Synology DS1821+/36GB RAM/130TB
Synology DS920+/20GB RAM/54TB
Synology DS916+ii/8GB RAM/12TB
mbergmann_sh
Beiträge: 8
Registriert: 04.08.2022 15:50

Re: CalendarGadget neues Datum nachträglich setzen

Beitrag von mbergmann_sh »

ja, das verstehe ich soweit. Bedeutet das im Umkehrschluss, dass Calendar- und Dategadget nicht dazu in der Lage sind, Werte vor 1970 und nach 2038 abzubilden?

Ich komme eigentlich von C++/Qt5, beschäftige mich erst seit Kurzem mit PureBasic. Unter Qt ist es kein Problem, ein DateWidget mit nahezu beliebigem Datum zu füttern.
Benutzeravatar
jacdelad
Beiträge: 348
Registriert: 03.02.2021 13:39
Computerausstattung: Ryzen 5800X, 108TB Festplatte, 32GB RAM, Radeon 7770OC
Wohnort: Riesa
Kontaktdaten:

Re: CalendarGadget neues Datum nachträglich setzen

Beitrag von jacdelad »

Ja, das ist so. Wie Kiffi zitiert hat steht das auch in der Hilfe so drin. Es gibt aber mindestens 2 Module, die das umgehen, Dank größerer Variablen. Kiffi hatte einen Link gepostet.
PureBasic 6.04/XProfan X4a/Embarcadero RAD Studio 11/Perl 5.2/Python 3.10
Windows 11/Ryzen 5800X/32GB RAM/Radeon 7770 OC/3TB SSD/11TB HDD
Synology DS1821+/36GB RAM/130TB
Synology DS920+/20GB RAM/54TB
Synology DS916+ii/8GB RAM/12TB
mbergmann_sh
Beiträge: 8
Registriert: 04.08.2022 15:50

Re: CalendarGadget neues Datum nachträglich setzen

Beitrag von mbergmann_sh »

ja, hab ich mir angesehen und die Quelltexte für das Modul und das Beispiel getestet. Da werd ich mein Programm wohl ein bisschen umstellen müssen (...und auf EnableExplicit verzichten müssen).

War mir nicht sicher, ob ich die PB-Hilfe richtig interpretiert habe und dachte, dass da vielleicht einfach ein umständlicherer Weg doch zum Ziel führen würde.

Vielen Dank Euch allen für die Erklärungen!
Benutzeravatar
jacdelad
Beiträge: 348
Registriert: 03.02.2021 13:39
Computerausstattung: Ryzen 5800X, 108TB Festplatte, 32GB RAM, Radeon 7770OC
Wohnort: Riesa
Kontaktdaten:

Re: CalendarGadget neues Datum nachträglich setzen

Beitrag von jacdelad »

Warum auf EnableExplicit verzichten?
Der Code ist eigentlich so gestaltet, dass die Befehle nahezu identisch sind.
PureBasic 6.04/XProfan X4a/Embarcadero RAD Studio 11/Perl 5.2/Python 3.10
Windows 11/Ryzen 5800X/32GB RAM/Radeon 7770 OC/3TB SSD/11TB HDD
Synology DS1821+/36GB RAM/130TB
Synology DS920+/20GB RAM/54TB
Synology DS916+ii/8GB RAM/12TB
mbergmann_sh
Beiträge: 8
Registriert: 04.08.2022 15:50

Re: CalendarGadget neues Datum nachträglich setzen

Beitrag von mbergmann_sh »

Bildnaja - zumindest im Beispiel muss ich diverse verwendete Variablen erstmal deklarieren, damit es mit EnableExplicit läuft.
Antworten