Datum vergleichen
-
hiho allerseits
ich habe es hinbekommen, das datum aus der systemzeit von win auszulesen.
diese datum habe ich in die registry gespeichert als 8 zeichen langen string wobei 2 zeichen für tag, 2 für monat und 4 für jahr sind.jetzt eine frage:
ich teile das ganze wieder in integers auf und vergleiche mit dem aktuellen datum. jetzt ist es eine frage der rechenkunst: wie bekomme ich die differenz der tage? ich muss berücksichtigen, dass die monate verschieden lang sein können, wann ein jahreswechsel ist, februar kann mal 28 mal 29 tage haben...
gibt es da eine einfache möglichkeit oder muss ich für alle möglichen fälle unterscheiden? dann hätte ich zumindest eine seitenlange funktion dafür, das wollte ich möglichst vermeiden.
vorschläge?
-
Ich würde die Daten erstmal in einer Struktur speichern, etwa so:
struct Date { unsigned int day; unsigned int month; unsigned int year; };
Dann kannst du einfach mittels einer Funktion z.B. das kleinere Datum prüfen.
(Return wert ist == 1, wenn d1 < d2, ansonsten 0)// Beispielaufruf: // d1 = aktuelles Datum // d2 = (aktuelles Datum - 24h) // Funktion sollte jetzt 0 zurueckgeben int getLessDate(const Date& d1, const Date& d2) { if(d1.year != d2.year) return ((d1.year < d2.year) ? 1 : 0); else if(d1.month != d2.month) return ((d1.month < d2.month) ? 1 : 0); else return ((d1.day < d2.day) ? 1 : 0); }
(Ungetestet, als kleine Anregung
)
//Edit: [...] *grmmml* [...]
Caipi
-
Unix hat nicht ohne Grund Timestamp!
Also ich wuerde es mit time.h machen,
dort kann man noch mit Timestamp arbeiten!!!Darum Unix nicht Windows...
-
@Caipi:
Noch nie was von bool gehört?
-
guten morgen
ich hab mir mal eine Datumsklasse geschrieben, welche das Datum ausliest
und es dann in 3 vars speichert ( int d, m, y)um die daten zu vergleichen habe ich operatoren implantiert:
//date.h #include <time.h> class date { public: enum Month{ jan =1,feb,mrs,apv,mai,jun,jul,aug,sep,oct,nov,dez}; //Konstrukor and Destruktor date(int dd,int mm, int yy); date(); ~date(); /////////////////////////// int day() const; int month() const; int year() const; //Zugriffsfunktionen void addYears(int n); void addMonths(int n); void addDays(int n); void subYears(int n); void subMonths(int n); void subDays(int n); //Error-Struktur struct Error { const char* error; Error(char* msg){error = msg;} }; private: int d,m,y; };
die operatoren so deklariert
//Operatoren bool operator==(date,date); bool operator!=(date,date);
und definiert:
//Operatoren///////////////////////////////////////////////////////////////////////////////////////// //vergleicht 'date' Datentypen, return: bool bool operator==(date a ,date b) { return (a.day()==b.day() && a.month()== b.month() && a.year() == b.year()); } //vergleicht 'date' Datentypen, return: bool bool operator!=(date a, date b) { return (a.day()!=b.day() || a.month()!=b.month() || a.year() != b.year()); }
desseweitern habe ich auch ganz einfach einen subraktionsoperator implantiert so das die syntax
date a
date b(2,3,2002);
int x = a-b; // differnz in tagen
möglich ist:falls du interesse an der klasse hast reims[at]gmx.li oder 308-019-117(ICQ)
gruss reima
-
ness schrieb:
@Caipi:
Noch nie was von bool gehört?Doch, eigentlich schon.
Keine Ahnung warum ich es nicht verwendet habeCaipi
-
so dankeschön erschtma allerseits
hab mir jetzt den source von reima geben lassen
so far werd das ding nun erstmal genießen *g*
mfg
unbeholfen_