Seite 1 von 1
Zeitrechnungen
Verfasst: 18.10.2004 20:23
von Maurizio555
Hallo!
Es gibt ein Algorythmus, der es erlaubt, ein bel. datum in eine eindeutige Nummer zu umwandeln. Diese Nummer erhöht sich jedes Jahr um EINS.
Ich weiß nicht mehr wie dieser Kalender (für math. und wissens. Zwecke)
heißt, ich glaube man nennt ihn auch "absoluter Kalender".
Mit dem Algorythmus kann man z.B. 19.09.2001 in so eine Nummer umwandeln, aber auch zurück, z.B. 3278954 in 10.12.2004.
Kennt jemand diesen Algorythmus, oder weiß wo ich ihn finden kann?
Ich hatte ihn mal in den VC20 Zeiten, hab's nicht aufgehoben

Verfasst: 18.10.2004 20:51
von Maurizio555
Habe das erste gefunden (von Datum zur Nummer), allerdings nicht andersherrum und nur in Pascal. Kann jemand was damit anfangen?
Was ist "trunc"?
y=Jahr (z.B. 2004 nicht 04). m=Monat. d=Tag.
if(m<3)then
begin
y:=y-1;
m:=m+12;
end;
a:=trunc(y/100);
b:=2-a+trunc(a/4);
numero:=trunc(365.25*(y+4716))+
trunc(30.6001*(m+1))+d+b-1524;
Verfasst: 18.10.2004 21:02
von Deeem2031
trunc() ist das selbe wie Int()
Proceduren für Zeitrechnugen in PB
Verfasst: 21.10.2004 20:55
von Maurizio555
Für alle, die auch Zeitrechnungen anstellen müßen:
Ich habe den Code in PB übersetzt.
Die erste Procedur erwartet tag,monat,jahr und gibt die Zahl des fortlaufenden Kalender zurück. Damit sind Zeitrechnungen möglich
(20.10.2003 minus 13.05.1973 wäre sonst schwer...).
Die zweite Procedur erwartet die gleichen Parameter und gibt den Tag zurück (montag o. dienstag o. ...).
Was jetzt fehlt ist eine Procedur, die die erste umkehrt, also sollte die Zahl des forlauf.Kalender erwarten und das normale Datum zurückgeben.
Hat jemand eine Idee?
Procedure.l FortlaufKal(d.b, m.w, y.w)
If m.w <3
y.w=y-1
m.w=m+12
EndIf
a.w=Int(y/100)
b=2-a+Int(a/4)
zahl.l=Int(365.25*(y+4716))+Int(30.6001*(m+1))+d+b-1524
ProcedureReturn zahl
EndProcedure
Procedure.s TagDerWoche(d.b, m.w, y.w)
If m.w <3
y.w=y-1
m.w=m+12
EndIf
a.w=Int(y/100)
b=2-a+Int(a/4)
zahl.l=Int(365.25*(y+4716))+Int(30.6001*(m+1))+d+b-1524
zahl=IMod(zahl,7)
Select zahl
Case 0
tag.s="Montag"
Case 1
tag.s="Dienstag"
Case 2
tag.s="Mittwoch"
Case 3
tag.s="Donnerstag"
Case 4
tag.s="Freitag"
Case 5
tag.s="Samstag"
Case 6
tag.s="Sonntag"
EndSelect
ProcedureReturn tag
EndProcedure
Verfasst: 21.10.2004 22:43
von Falko
PB hat doch auch Datumsfunktionen ?
Code: Alles auswählen
Procedure.s TagDerWoche(Jahr.w,Monat.w,Tag.b,Stunde.l,Minute.l,Sekunde.l)
Day.s
Datum = Date(2004,10,21,0,0,0)
Tag = DayOfWeek(Datum)
Select Tag
Case 0 : Day="Sonntag"
Case 1 : Day="Montag "
Case 2 : Day="Dienstag"
Case 3 : Day="Mittwoch"
Case 4 : Day="Donnerstag"
Case 5 : Day="Freitag"
Case 6 : Day="Samstag"
EndSelect
ProcedureReturn Day
EndProcedure
Debug TagDerWoche(2004,10,21,0,0,0)
PureBasic - Date
Einleitung
Die 'Date' (Datums) Library ermöglicht den Umgang mit Datums- und Zeitangaben von 1970 bis 2034.
Benutzt wird dabei der Unix-Typ (Anzahl der seit dem 1. Januar 1970 vergangenen Sekunden).
Befehlsübersicht:
------------------------------------------------------------------------------------
AddDate
Date
Day
DayOfWeek
DayOfYear
FormatDate
Hour
Minute
Month
ParseDate
Second
Year
Verfasst: 22.10.2004 17:31
von Maurizio555
Hallo!
Ja, PB hat auch Zeitfunktionen, diese sind aber (wie du selbst sagst) zeitlich begrenzt (1970 bis 2034).
Gut, die meisten Rechnungen dürften sich sowieso in diesen Rahmen bewegen, aber eben nur die Meisten.
Der fortlaufende Kalender reicht von ca. 5000 v.C bis über das Jahr 4000 n.C. ohne die Algorythmen ändern zu müßen.