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 habe 😕

    Caipi 😉



  • 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_


Anmelden zum Antworten