Kalender liefert falsche Datumsangaben



  • Hallo,
    wir sind gestern im Rahmen einer Vorlesung auf ein Problenm gestoßen, dass gleichmaßen an allen PCs aufgetreten ist und dessen Ursache wir nicht gefunden haben.

    Dialogbasierte Anwednung mit MS Visual C++ gebastelt und einen Kalender ins Anwendungsformular übernommen (Typ: CTime, member: m_calendar). Zusätzlich drei Textfelder (Typ: int, member: m_day, m_month, m_year).

    Beim Start der Anwendung wird der Kalender mit dem Tagesdatum initialisiert

    m_calendar = CTime::GetCurrentTime();
    

    Klappt auch.

    Beim Druck auf den OK-Button, soll das Datum ausgelesen werden und der Tag in das Feld m_day, der Monat in das Feld m_month und das Jahr in das Feld m_year geschreiben werden. Dazu gibt es folgenden Code:

    void CK_aufg3Dlg::OnOK() 
    {
    	if (UpdateData(TRUE))
    	{
    	   m_day = m_calendar.GetDay();
    	   m_month = m_calendar.GetMonth();
    	   m_year = m_calendar.GetYear();
    
    	   UpdateData(FALSE);
    	}
    

    Beim Start passiert nun folgendes.
    Der Kalender zeigt das aktuelle Tagesdatum an. Drückt man nun auf ok, werden auch die entsprechenden Werte angezeigt.
    Verändert man über die Pfeiltasten des Kalenders den Monat und/oder das Jahr und drückt dann auf OK, sind die angegebenen Werte in den Textfeldern auch korrekt.
    Ändert man jedoch den Tag und drückt dann OK, springt der Kalender auf einen ganz anderen Tag und es werden diese Werte in den Textfeldern angezeigt.

    Beispiel:
    Initialisiert mit dem Tagesdatum (heute). Button "OK" bringt 13.04.2008
    Kalender verstellt auf 13.06.2008. Button "OK" bringt 13.06.2008
    Kalender verstellt auf 13.06.2009. Button "OK" bringt 13.06.2009
    Kalender verstellt auf 16.04.2008. Button "OK" bringt 01.05.2011 😕
    Kalender verstellt auf 17.04.2008. Button "OK" bringt 02.05.2011 😕
    Kalender verstellt auf 26.04.2008. Button "OK" bringt 11.05.2011 😕

    Also sobald ich den Tag verändere, wird das Datum um etwas mehr als drei Jahre erhöht. Bei ausschließlicher Veränderung des Monats oder des Jahres werden die korrekten Werte ermittelt.

    Hat einer eine Idee, wo hier das Problem liegen könnte?

    Danke für Eure Ideen.



  • hatte dieses problem schon mal mit dem CMonthCalCtrl.

    folgender code hat das problem gelöst:

    SYSTEMTIME sysTime;
    m_cal.GetCurSel(&sysTime);
    
    sysTime.wHour = 0;
    sysTime.wMinute = 0;
    sysTime.wSecond = 0;
    sysTime.wMilliseconds = 0;
    
    CTime t(sysTime);
    

    im t ist nun der richtige Tag!


Anmelden zum Antworten