Für ein Projekt ist es notwendig, dass Data (Data = lat. Mehrzahl von Datum) gespeichert werden, die teilweise weit vor 1970 und teilweise etwas nach 2038 liegen. Der in PureBasic verwendete Unix Time Stamp ist damit nicht anwendbar, glaube ich.
Also wollte ich eine eigene Datumsverwaltung schreiben, die ich dann in mein Projekt einbaue. Hierbei ist einige Rechenarbeit von Nöten, noch wichtiger aber ist, dass ich den Julianischen Kalender richtig verstanden habe, deshalb frage ich hier nach.
Also ... es gibt Schaltjahre, die den 29. Februar einführen, aller vier Jahre, die durch vier teilbar sind. Ansonsten verläuft das Datum regelmäßig, also 7 Wochentage, 24 Stunden je Tag, keine Stunde hat mehr als 60 Minuten, keine Minute mehr als 60 Sekunden, usw. das ganze 365 oder 366 Tage im Jahr beginnend bei Jahr 1(!) .
Was gibt es noch zu beachten? Mir schwant, ich vergesse da etwas. War da nicht etwas mit einer Ungenauigkeit des Julianischen Kalenders, die irgendwie bereinigt werden muss, aller hundert Jahre, oder so?
[s]Eigener Timestamp[/s] erweitertes Datum für Linux
[s]Eigener Timestamp[/s] erweitertes Datum für Linux
Zuletzt geändert von es_91 am 20.02.2014 10:12, insgesamt 2-mal geändert.
Re: Eigener Timestamp - was beachten?
Wikipedia beantwortet meine Fragen: "Die Verkürzung [von 365,25 Tage auf 365,24irgendwas; Anm. v. es_91] erfolgte mit Hilfe einer weiteren, übergeordneten Schaltregel, nach der diejenigen Säkularjahre (Jahre, deren Zahl durch 100 ohne Rest teilbar ist), deren Zahl dividiert durch 400 keine ganze Zahl ergibt, keine Schaltjahre sind."
Also, wenn mein Kalender am 1. Januar 1900 beginnen sollte und etwa 200 Jahre lang halten soll, muss ich nur beachten, dass das Jahr 1900 und das Jahr 2100 keine Schaltjahre sind.
Ansonsten ist alles analog, oder?
Und ein kleines EDIT: Wir verwenden nicht den Julianischen Kalender, sondern den Gregorianischen.
Also, wenn mein Kalender am 1. Januar 1900 beginnen sollte und etwa 200 Jahre lang halten soll, muss ich nur beachten, dass das Jahr 1900 und das Jahr 2100 keine Schaltjahre sind.
Ansonsten ist alles analog, oder?
Und ein kleines EDIT: Wir verwenden nicht den Julianischen Kalender, sondern den Gregorianischen.
Re: Eigener Timestamp - Optimierungen?
Bevor ich dieses Projekt weiterentwickle und in der Code-Sektion online stelle, möchte ich Euch fragen, ob Euch etwaige Optimierungen zu meiner Monats-Fallunterschied-Methode einfallen. Etwa alle Monate in eine strukturierte Liste packen, die die jeweilige Anzahl der Tage speichert und dann die Liste durchlaufen lassen . . .
Ich weiß es nicht genau, was besser ist. Darum frage ich Euch.
Hier ist mein Code bis jetzt:
Geprüft und getestet. 
Ich weiß es nicht genau, was besser ist. Darum frage ich Euch.
Hier ist mein Code bis jetzt:
Code: Alles auswählen
; DateX Time Stamp v. 1.00
; PureBasic: 5.21 LTS
; Demo: No
;
; Supported dates: 01.01.1900 0:00:00 to 31.01.2699 23:59:59
; **** Remove this if you use this in your own code ****
EnableExplicit
; ********
Procedure.q DateX(Year = #PB_Any, Month = #PB_Any, Day = #PB_Any, Hour = #PB_Any, Minute = #PB_Any, Second = #PB_Any)
Define DateX, ThisYear, DaysTotal, DayOfYear
If Year = #PB_Any
ProcedureReturn DateX(1970, 1, 1, 0, 0, 0) + Date()
Else
For ThisYear = 1900 To Year
DayOfYear = 0
If ThisYear = 1900 Or ThisYear = 2100 Or ThisYear = 2200 Or ThisYear = 2300 Or ThisYear = 2500 Or Not Int(ThisYear/4)*4 = ThisYear
If ThisYear = Year
If Month > 1
DayOfYear + 31
EndIf
If Month > 2
DayOfYear + 28
EndIf
If Month > 3
DayOfYear + 31
EndIf
If Month > 4
DayOfYear + 30
EndIf
If Month > 5
DayOfYear + 31
EndIf
If Month > 6
DayOfYear + 30
EndIf
If Month > 7
DayOfYear + 31
EndIf
If Month > 8
DayOfYear + 31
EndIf
If Month > 9
DayOfYear + 30
EndIf
If Month > 10
DayOfYear + 31
EndIf
If Month > 11
DayOfYear + 30
EndIf
If Not ThisYear = Year
DayOfYear + 31
Else
DayOfYear + Day
EndIf
DaysTotal + DayOfYear
Else
DaysTotal + 365
EndIf
Else
If ThisYear = Year
If Month > 1
DayOfYear + 31
EndIf
If Month > 2
DayOfYear + 29
EndIf
If Month > 3
DayOfYear + 31
EndIf
If Month > 4
DayOfYear + 30
EndIf
If Month > 5
DayOfYear + 31
EndIf
If Month > 6
DayOfYear + 30
EndIf
If Month > 7
DayOfYear + 31
EndIf
If Month > 8
DayOfYear + 31
EndIf
If Month > 9
DayOfYear + 30
EndIf
If Month > 10
DayOfYear + 31
EndIf
If Month > 11
DayOfYear + 30
EndIf
If Not ThisYear = Year
DayOfYear + 31
Else
DayOfYear + Day
EndIf
DaysTotal + DayOfYear
Else
DaysTotal + 366
EndIf
EndIf
Next
ProcedureReturn (DaysTotal - 1) * 24 * 60 * 60 + Hour * 60 * 60 + Minute * 60 + Second
EndIf
EndProcedure
Debug DateX()
Re: Eigener Timestamp - Optimierung erbeten
Für Windows habe ich folgenden Code.
http://www.purebasic.fr/german/viewtopi ... =8&t=14159
Ist somit auch mit z.B. excel kompatibel
http://www.purebasic.fr/german/viewtopi ... =8&t=14159
Ist somit auch mit z.B. excel kompatibel
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
Re: Eigener Timestamp - Optimierung erbeten
Ja, danke, aber ich brauch's auch für Linux. 
Re: [s]Eigener Timestamp[/s] erweitertes Datum für Linux
Kann mir jemand sagen, wie ich unter Linux einem DateGadget ein Datum von vor 1970 einhauchen kann?
- Chimorin
- Beiträge: 451
- Registriert: 30.01.2013 16:11
- Computerausstattung: MSI GTX 660 OC mit TwinFrozr III
6Gb DDR 3 RAM
AMD Phenom II X4 B55 @ 3,6GHz
Windows 7 Home Premium 64-bit
