steht, dann macht eine "zeitrechnung" erst ab ca. 1600 sinn - glaube ich. dazu zwei proceduren die ein datum in sekunden seit dem 1.1.1600 0 uhr umrechnen und auch wieder zurück. der code ist zwar nicht schön, aber ich hoffe er tut's - auch fehlerfrei.
Code: Alles auswählen
OpenConsole()
Procedure.q DateToSek(Date$); JJJJ,MM,TT,SS,MI,SE
    p=FindString(Date$,",",1)   :  Jahr=Val(Left(Date$,p-1))  : Date$=Mid(Date$,p+1,20)
    p=FindString(Date$,",",1) :  Monat=Val(Left(Date$,p-1))   : Date$=Mid(Date$,p+1,20)
    p=FindString(Date$,",",1) :  Tag=Val(Left(Date$,p-1))     : Date$=Mid(Date$,p+1,20)
    p=FindString(Date$,",",1) :  Stunde=Val(Left(Date$,p-1))  : Date$=Mid(Date$,p+1,20)
    p=FindString(Date$,",",1) :  Minute=Val(Left(Date$,p-1))  : Date$=Mid(Date$,p+1,20)
    Sekunde=Val(Date$)
    Monat-1
    Tag-1
    
    If Jahr>1600
        For i=1600 To Jahr-1 Step 4
            If  ( i%4=0 And Not i%100=0 ) Or i%400=0
                SchaltTage+1
            EndIf
        Next i
    EndIf
    If (( Jahr%4=0 And Not Jahr%100=0 ) Or Jahr%400=0) And Monat>1
        SchaltTagJetzt=1
    Else
        SchaltTagJetzt=0
    EndIf
    Jahr-1600
    
    MTag=PeekW(?MonatsTage+(Monat*2))
    Sek.q=Jahr*365
    Sek=(Sek+SchaltTage+MTag+SchaltTagJetzt+Tag)*24
    Sek=(Sek+Stunde)*60
    Sek=(Sek+Minute)*60
    Sek+Sekunde
    ProcedureReturn Sek.q
    
    DataSection
      MonatsTage:
        Data.w 0,31,59,90,120,151,181,212,243,273,304,334,365
    EndDataSection
    
EndProcedure
Procedure.s SekToDate(Sek.q)
    #TagSek=86400
    #JahrSek=365*24*3600
    #SchaltJahrSek=#JahrSek+#TagSek
    TagSek=86400
    Jahr=1600
    Repeat
        If (( Jahr%4=0 And Not Jahr%100=0 ) Or Jahr%400=0)
            If Sek-#SchaltJahrSek>=0
                Jahr+1
                Sek-#SchaltJahrSek
            Else
                Break
            EndIf
        Else
            If Sek-#JahrSek>=0
                Jahr+1
                Sek-#JahrSek
            Else
                Break
            EndIf
        EndIf
    ForEver
    
    If (( Jahr%4=0 And Not Jahr%100=0 ) Or Jahr%400=0)
        SchaltJahr=1
    Else
        SchaltJahr=0
    EndIf
    
    Tage=Sek/#TagSek
    Zeit=Sek%#TagSek
    
    For i=1 To 12
        MTag=PeekW(?MonatsTage+(i*2))
        If SchaltJahr And i>1 : MTag+1 : EndIf
        If MTag>Tage : Break : EndIf
        vorMTag=MTag
    Next i
    Monat=i
    Tag=Tage-vorMTag+1
    Stunde=Zeit/3600 : Zeit=Zeit%3600
    Minute=Zeit/60 : Sekunde=Zeit%60
    
    ProcedureReturn StrQ(Jahr)+"."+RSet(StrQ(Monat),2,"0")+"."+RSet(StrQ(Tag),2,"0")+"  "+RSet(StrQ(Stunde),2,"0")+":"+RSet(StrQ(Minute),2,"0")+":"+RSet(StrQ(Sekunde),2,"0")
EndProcedure
Sek.q=DateToSek(FormatDate("%yyyy,%mm,%dd%,%hh,%ii,%ss", Date()))
PrintN("Jetziges Datum in Sekunden seit dem 01.01.1600 0 Uhr:")
PrintN(StrQ(Sek))
PrintN("")
PrintN("Und die Sekunden zurück in ein Datum:")
PrintN(SekToDate(Sek))
Input()
CloseConsole()