Gelöst: Datumsfunktionen

Anfängerfragen zum Programmieren mit PureBasic.
Diogenes
Beiträge: 91
Registriert: 05.06.2014 10:52

Gelöst: Datumsfunktionen

Beitrag von Diogenes »

Hallo,

wahrscheinlich habe ich nur Tomaten auf den Augen, aber ich habe weder im
Forum, noch in der Hilfe die Umkehrfunktion zu date() gefunden.
Beispiel 1:
der 01.01.1990 00:00:00 Uhr ergibt
date(1990,01,01,00,00,00)= 631152000

Beispiel 2: Date(1994,05,20,15,00,00)= 769446000
aber: wie bekomme ich aus 769446000 den 20.05.1994 15:00:00 Uhr heraus ??

Grund für die Frage:
Ich möchte in einem Spiel den Kalender mitlaufen lassen.
Startdatum ist der 1.1.1980 eine spielstunde dauert 200ms => 1Tag=4800ms=4,8 sek
real hat ein tag 86400 => das spiel läuft 86400/4,80 =18000 mal schneller als die Realität
wenn ich dann über elapsedmilliseconds die Zeit messe kann ich also gut die Datumswerte hochzählen. Daher die Frage: wann ist 852684000 ?
danke fürs Lesen
Zuletzt geändert von Diogenes am 22.01.2017 21:20, insgesamt 1-mal geändert.
Benutzeravatar
mk-soft
Beiträge: 3855
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: Datumsfunktionen

Beitrag von mk-soft »

FormatDate(Maske$, Datum)

Rest mit "F1"
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Diogenes
Beiträge: 91
Registriert: 05.06.2014 10:52

Re: Datumsfunktionen

Beitrag von Diogenes »

Danke für Deine Antwort mk-soft aber mein problem ist nicht das Formatieren, sindern das Berechnen.
date(852684000) funktioniert leider nicht. Das habe ich natürlich als Erstes ausprobiert.

vielleicht habe ich mich mißverständlich ausgedrückt:

Text$=FormatDate(%dd.%mm.%yyyy,Date(769446000))
Debug text$
funktioniert nicht
laut Hilfe: Datumswert = Date([Jahr, Monat, Tag, Stunde, Minute, Sekunde])
ich will aber gerade die umgekehrte Funktion
text $=formatdate(format, date(datumswert))
- chris -
Beiträge: 195
Registriert: 24.08.2005 19:52
Wohnort: Stadtallendorf

Re: Datumsfunktionen

Beitrag von - chris - »

Code: Alles auswählen

Text$=FormatDate("%dd.%mm.%yyyy",769446000)
Debug Text$
PB v5.72 x86/x64
Windows 10 Pro 64bit
Diogenes
Beiträge: 91
Registriert: 05.06.2014 10:52

Re: Datumsfunktionen

Beitrag von Diogenes »

Wow, so einfach war das.
Ich habe jetzt den ganzen Sonntag daran 'rumprobiert.
Danke die sehr -chris-

Ich war immer der Meinung das Formatdate würde nur die Formatierung übernehmen,
daher habe ich immer das date() da mit eingebaut.
ich sag's ja "Tomaten auf den Augen"

schönen Abend noch
GPI
Beiträge: 1511
Registriert: 29.08.2004 13:18
Kontaktdaten:

Re: Datumsfunktionen

Beitrag von GPI »

Du missverstehst da was. Die Datumsfunkionen in PureBasic wird auch gerne woanders als Timestamp bezeichnet. https://de.wikipedia.org/wiki/Zeitstempel
Sie ist ein Integerwert (und kein eigenes Datenformat) und ist eine Sekundenanzeige. Wenn du ein Tag raufrechnen willst, geht das einfach deine Timestamp mit 24 (Stunden) * 60 (Minuten) * 60 (Sekunden) addieren. Auch wichtig, der Startwert ist der 01.01.1970. Du kannst damit kein Datum davor erfassen. Hintergrund ist hier einfach Historisch begründet, man wollte damit die Systemzeit erfassen fürs Dateisystem, Logs etc. nicht Historische Ereignisse aufzählen. Wobei Zeit und die Messung eine Geschichte für sich ist. Gab genügen Reformen in der Geschichte, die Regional sogar noch unterschiedlich durchgeführt wurden.

du willst also alle 200 ms eine Tag dazuaddieren?
Dann ist die Formel
Zeit=Zeit + (24*60*60) * verstrichene Millisekunden / 200
Zeit würde ich in Format Quads speichern. Bei Integer unter 32Bit kommt es sonst 2038 zu einen Überlauf.

Sind die PB-Funktionen eigentlich mittlerweile dahingehen abgesichert?

p.s.: Erinnert ihr euch an den Millenium-Bug? 2038 wird aus diesen Grund ein neuer "Crash" möglich, wo alle veralteten Linux-Systeme aussteigen.
CodeArchiv Rebirth: Deutsches Forum Github Hilfe ist immer gern gesehen!
Diogenes
Beiträge: 91
Registriert: 05.06.2014 10:52

Re: Datumsfunktionen

Beitrag von Diogenes »

Danke für Deine Erklärung gpi,
auch wenn nicht ein Tag 200 ms sind sondern 1 stunde :wink:
Das hatte ich auch in etwa so vor. Daher hatte ich ja als startdatum den 1.1.1980 00:00 Uhr
angesetzt. Diesen Wert kann ich ja über date(1980,01,01,0,0,0) ermitteln.
Danach wird dann anhand der vergangenen msek weitergerechnet. Das hätte man
auch alles programmtechnisch umrechnen können, aber dann hätte man entsprechende Prozeduren
für 28, 29, 30, 31 Tage pro Monat einbauen müssen, daher der Gedanke das über date() ausrechnen
zu lassen .
Antworten