Wie Unix Time Stamp mit 64 Bit berechnen?
- NicTheQuick
- Ein Admin
- Beiträge: 8807
- Registriert: 29.08.2004 20:20
- Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti - Wohnort: Saarbrücken
Wie Unix Time Stamp mit 64 Bit berechnen?
Hallo Leute.
Ich glaube ich bin zu blöd zum Suchen. Im Forum finde ich nichts passendes
darüber und bei Google gibt es nur fertige Rechner.
Ich suche einfach die Formel um Jahr, Monat, Tag, Stunde, Minute und
Sekunde in das Unix-Format zu übertragen. Die letzten drei sind ja kein
Problem, aber vom Zeitstempel zurück in das gebrochene Datumsformat ist
schwer.
Hat das zufällig schonmal jemand gemacht oder kennt einen Link, der den
Algorithmus erklärt? Das bräuchte ich für mein aktuelles Projekt.
Achja. API nützt mir nichts, außer ihr habt entsprechende Pendants für
Linux. Das Programm soll später nämlich auf Windows und Linux genau
gleich funktionieren und reagieren.
Danke schonmal!
Ich glaube ich bin zu blöd zum Suchen. Im Forum finde ich nichts passendes
darüber und bei Google gibt es nur fertige Rechner.
Ich suche einfach die Formel um Jahr, Monat, Tag, Stunde, Minute und
Sekunde in das Unix-Format zu übertragen. Die letzten drei sind ja kein
Problem, aber vom Zeitstempel zurück in das gebrochene Datumsformat ist
schwer.
Hat das zufällig schonmal jemand gemacht oder kennt einen Link, der den
Algorithmus erklärt? Das bräuchte ich für mein aktuelles Projekt.
Achja. API nützt mir nichts, außer ihr habt entsprechende Pendants für
Linux. Das Programm soll später nämlich auf Windows und Linux genau
gleich funktionieren und reagieren.
Danke schonmal!
verstehe ich dich richtig,
dass du einfach "per Hand" von einer Zahl (Zeitstempel) die genannten Zeiteinheiten ermitteln willst ?
Das heißt du hast probleme mit den unregelmäßigen Monatslängen und Jahreslängen ?
Da dort ja trotzdem eine regelmäzigkeit auftritt (Formel) könnte man mehrere Modulo funktionne hintereinander schalten um möglichst wenig If abfragen zu haben...
Wenn ich das richtig verstanden habe, kann ich mich ja mal dran versuchen...
dass du einfach "per Hand" von einer Zahl (Zeitstempel) die genannten Zeiteinheiten ermitteln willst ?
Das heißt du hast probleme mit den unregelmäßigen Monatslängen und Jahreslängen ?
Da dort ja trotzdem eine regelmäzigkeit auftritt (Formel) könnte man mehrere Modulo funktionne hintereinander schalten um möglichst wenig If abfragen zu haben...
Wenn ich das richtig verstanden habe, kann ich mich ja mal dran versuchen...
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
- NicTheQuick
- Ein Admin
- Beiträge: 8807
- Registriert: 29.08.2004 20:20
- Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti - Wohnort: Saarbrücken
hier meine derzeitigen Proceduren :
Werde im Laufe des Tages noch änderungen vornehmen ....
Code: Alles auswählen
Procedure SecondQ(Time.q)
Second = (Time) % 60
ProcedureReturn Second
EndProcedure
Procedure MinuteQ(Time.q)
Minute = (Time / 60) % 60
ProcedureReturn Minute
EndProcedure
Procedure HourQ(Time.q)
Hour = (Time / 3600) % 24
ProcedureReturn Hour
EndProcedure
Procedure DayInYearQ(Time.q)
TempDays.q = Time / 86400
TempYear.q = TempDays / 365
; Schaltjahre
SJ4 = (TempYear+1)/4
SJ100 = (TempYear+69)/100
SJ400 = (TempYear+369)/400
SD = SJ4-SJ100+SJ400
TempYearDay = (TempDays - SD) % 365 +1
Year = (TempDays - SD) / 365 + 1970
If 365-TempYearDay < SD
If Not Year % 4 : Add + 1 : EndIf
If Not Year % 100 : Add - 1 : EndIf
If Not Year % 400 : Add + 1 : EndIf
EndIf
ProcedureReturn TempYearDay+Add
EndProcedure
Procedure YearQ(Time.q)
TempDays = Time / 86400
TempYear = TempDays / 365
SJ4 = (TempYear+1)/4
SJ100 = (TempYear+69)/100
SJ400 = (TempYear+369)/400
SD = SJ4-SJ100+SJ400
Year = (TempDays - SD) / 365 + 1970
ProcedureReturn Year
EndProcedure
Procedure MonthQ(Time.q)
Year = YearQ(Time)
DayInYear = DayInYearQ(Time)
If DayInYear > 31+28
If Not Year % 4 : Add + 1 : EndIf
If Not Year % 100 : Add - 1 : EndIf
If Not Year % 400 : Add + 1 : EndIf
EndIf
Restore MonthDays
For n = 1 To 12
Read MonthDays
If n = 2 : MonthDays+Add : EndIf
If DayInYear < MonthDays+1
ProcedureReturn n
EndIf
DayInYear - MonthDays
Next
EndProcedure
Procedure DayQ(Time.q)
Year = YearQ(Time)
DayInYear = DayInYearQ(Time)
If DayInYear > 31+28
If Not Year % 4 : Add + 1 : EndIf
If Not Year % 100 : Add - 1 : EndIf
If Not Year % 400 : Add + 1 : EndIf
EndIf
Restore MonthDays
For n = 1 To 12
Read MonthDays
If n = 2 : MonthDays+Add : EndIf
If DayInYear < MonthDays+1
ProcedureReturn DayInYear
EndIf
DayInYear - MonthDays
Next
EndProcedure
DataSection
MonthDays:
Data.l 31,28,31,30,31,30,31,31,30,31,30,31
EndDataSection
Code: Alles auswählen
Time.q = Date()
Debug Str(DayQ(Time))+"."+Str(MonthQ(Time))+"."+Str(YearQ(Time))+" "+Str(HourQ(Time))+":"+Str(MinuteQ(Time))+":"+Str(SecondQ(Time))
Zuletzt geändert von STARGÅTE am 06.08.2008 16:47, insgesamt 1-mal geändert.
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
Date() ist eine 32bit-basierte Funktion, wie die Basis-Funktion von Windows.
> Huhh? Das sollte mal geändert werden.
nein, eben nicht, dann wäre es nicht mehr kompatibel mit windows.
...allerdings wäre es eine gute idee, zusätzlich die Funktionen für den 64bit-Timestamp nativ in PB anzubieten.
> Huhh? Das sollte mal geändert werden.
nein, eben nicht, dann wäre es nicht mehr kompatibel mit windows.
...allerdings wäre es eine gute idee, zusätzlich die Funktionen für den 64bit-Timestamp nativ in PB anzubieten.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Der Weise weiß, dass er ein Narr ist.
Re: Wie Unix Time Stamp mit 64 Bit berechnen?
Habe auch eine Frage zum Timestamp:
Möchte Dateien in einem Verzeichnis löschen, die älter sind als x Tage
1. Wie kann ich dies realisieren?
2. Wie überprüfe ich, ob ein Ordner vorhanden ist?
Möchte Dateien in einem Verzeichnis löschen, die älter sind als x Tage
1. Wie kann ich dies realisieren?
2. Wie überprüfe ich, ob ein Ordner vorhanden ist?
Re: Wie Unix Time Stamp mit 64 Bit berechnen?
mit ExamineDirectory(#Verzeichnis, VerzeichnisName$, Pattern$)
ein Ordner deiner Wahr auslesen ... mehr dazu in der Hilfe ...
Ergebnis = DirectoryEntryDate(#Verzeichnis, DatumsTyp)
Gibt dir dann das Datum als Zeitstempel zurück (jenachdem was du angibst, das änderungsdatum zB.)
1 Tag = 24*60*60
Älter als x Tage wäre also, wenn Ergebnis von oben:
Ergebnis < Date() - 24*60*60 * x
Date() wäre der aktuelle Zeitstempel ...
Odner ist vorhanden wenn :
DirectoryEntryType(#Verzeichnis) = #PB_DirectoryEntry_Directory
auch dazu mehr in der Hilfe.
ein Ordner deiner Wahr auslesen ... mehr dazu in der Hilfe ...
Ergebnis = DirectoryEntryDate(#Verzeichnis, DatumsTyp)
Gibt dir dann das Datum als Zeitstempel zurück (jenachdem was du angibst, das änderungsdatum zB.)
1 Tag = 24*60*60
Älter als x Tage wäre also, wenn Ergebnis von oben:
Ergebnis < Date() - 24*60*60 * x
Date() wäre der aktuelle Zeitstempel ...
Odner ist vorhanden wenn :
DirectoryEntryType(#Verzeichnis) = #PB_DirectoryEntry_Directory
auch dazu mehr in der Hilfe.
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Re: Wie Unix Time Stamp mit 64 Bit berechnen?
Das Unix-Timeformat hat nichts mit Windows zu tun, sondern PB verwendet das Format um auch mit Linux kompatibel zu sein.
Somit ist es mit den Jahr 2038 schluss und wir Rentner werden wieder reanimiert um das Problem zu beseitigen.
Alternative:
http://www.purebasic.fr/german/viewtopi ... =8&t=14159
Somit ist es mit den Jahr 2038 schluss und wir Rentner werden wieder reanimiert um das Problem zu beseitigen.

Alternative:
http://www.purebasic.fr/german/viewtopi ... =8&t=14159
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive