[s]Eigener Timestamp[/s] erweitertes Datum für Linux

Für allgemeine Fragen zur Programmierung mit PureBasic.
es_91
Beiträge: 411
Registriert: 25.01.2011 04:48

[s]Eigener Timestamp[/s] erweitertes Datum für Linux

Beitrag von es_91 »

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?
Zuletzt geändert von es_91 am 20.02.2014 10:12, insgesamt 2-mal geändert.
es_91
Beiträge: 411
Registriert: 25.01.2011 04:48

Re: Eigener Timestamp - was beachten?

Beitrag von es_91 »

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? 8)

Und ein kleines EDIT: Wir verwenden nicht den Julianischen Kalender, sondern den Gregorianischen. :doh:
es_91
Beiträge: 411
Registriert: 25.01.2011 04:48

Re: Eigener Timestamp - Optimierungen?

Beitrag von es_91 »

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:

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()
Geprüft und getestet. :)
Benutzeravatar
mk-soft
Beiträge: 3902
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: Eigener Timestamp - Optimierung erbeten

Beitrag von mk-soft »

Für Windows habe ich folgenden Code.

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
es_91
Beiträge: 411
Registriert: 25.01.2011 04:48

Re: Eigener Timestamp - Optimierung erbeten

Beitrag von es_91 »

Ja, danke, aber ich brauch's auch für Linux. :)
es_91
Beiträge: 411
Registriert: 25.01.2011 04:48

Re: [s]Eigener Timestamp[/s] erweitertes Datum für Linux

Beitrag von es_91 »

Kann mir jemand sagen, wie ich unter Linux einem DateGadget ein Datum von vor 1970 einhauchen kann?
Benutzeravatar
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

Re: [s]Eigener Timestamp[/s] erweitertes Datum für Linux

Beitrag von Chimorin »

Da würde mir nur einfallen:
Selber programmieren.

Oder einfach das Vorgefertigte verwenden; Unter Windows funktioniert das.
Bild
Bild

- formerly known as Bananenfreak -
Antworten