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()