I
DeFeat schrieb:
Wäre das so zu realisieren ?
Nö.
Das der Vergleich mit heute wenig Sinn macht, habe ich ja oben schon mal geschrieben.
Du vergleichst immernoch CStrings mit "<" (öhm, könnte auch sein, dass durch die Verknüpfung mit && irgendwelche boolschen Werte verglichen werden aber ist ja jetzt auch nicht weiter wichtig).
Deine Variable Time ist ein CString und ebenso die Variable Date. Durch die Verknüpfung mit && wird daraus noch lange nicht ein Ausdruck, der Datum und Zeit beinhaltet. Das ginge mit + aber dann ist es immernoch ein CString, also eine Zeichenkette, und kein "Zeitpunkt", den man mit einem anderen Zeitpunkt vergleichen kann.
status.m_ctime.Format("%H:%M:%S") <- durch "Format" ist das übrigens auch ein CString
// Fall 1: Zeitpunkte vergleichen im Datumsformat:
CTime time1(2002, 3, 15, 0, 0, 0); // 15.03.2002
CTime time2(2003, 4, 16, 0, 0, 0); // 16.04.2003
if(time1 < time2)
AfxMessageBox("Das Datum in time1 ist jünger als das Datum in time2");
else
AfxMessageBox("Das Datum in time1 ist älter als das Datum in time2");
// Yo, prima. Das klappt, weil das Format CTime die Zeit speichert als "vergangene Sekunden seit 01.01.1970".
// In dem obigen Fall ist time1 gleich 1016146800 und time2 1050444000, der Vergleich mit < funktioniert.
// Fall 2: Zeitpunkte vergleichen im CStringformat:
CString Time1 = "15.03.2002";
CString Time2 = "16.04.2003";
// if(time1 < time2) wird hier nicht funktionieren, da, wie bereits erwähnt, der Rechner
// keine Ahnung hat, das diese Zeichenketten ein Datum darstellen. Statt dessen wird er
// bei diesem Vergleich mit < irgendwelche entsprechenden ASCII-Werte oder sonstige
// Zahlenwerte, die diesen Zeichenketten entsprechen, vergleichen.
// Um < zu benutzen, müssen also die Zeichenketten in Zahlen umgewandelt werden, oder man
// extrahiert Tag, Monat und Jahr als CString und vergleicht diese. Und da
// ein Datum im Dezember nicht zwangsläufig später ist, als ein Datum im Jannuar
// (24.12.1999, 01.01.2000), wird (in diesem Fall) von hinten nach vorne verglichen:
// die Jahre vergleichen:
if(Time1.Right(4) < Time2.Right(4)) // hier werden CString verglichen
AfxMessageBox("Das Datum in Time1 ist jünger als das Datum in Time2");
else
AfxMessageBox("Das Datum in Time1 ist älter als das Datum in Time2");
// OK, das klappt zwar, würde ich sicherheitshalber aber in Zahlen umwandeln:
if(atoi(Time1.Right(4)) < atoi(Time2.Right(4))) // hier werden Zahlen (int) verglichen
AfxMessageBox("Das Datum in Time1 ist jünger als das Datum in Time2");
else
AfxMessageBox("Das Datum in Time1 ist älter als das Datum in Time2");
// Jetzt fehlt nur noch die weitere Fallunterscheidung:
// wenn die Jahreszahlen gleich sind, muss man die Monate vergleichen und wenn diese
// gleich sind auch noch die Tage. Das muss man dann eben zurecht schnippeln, etwa so:
if( (atoi(Time1.Right(4)) < atoi(Time2.Right(4))) // Jahre vergleichen
|| (atoi(Time1.Right(4)) == atoi(Time2.Right(4)) && (atoi(Time1.Mid(3, 2)) < atoi(Time2.Mid(3, 2))))) // Monate vergleichen
Und zu der Frage mit der Uhrzeit:
ist bei Verwendung von CTime ganz einfach, da die Zeit bereits darin enthalten ist.
Bei Verwendung von CString muss die Zeit analog dem Datum aus dem CString heraus geholt werden und ebenso analog verglichen werden.