DateTimePicker
-
Hi,
ich wollte einfach nur mal das Control DateTimePicker verwenden.
Dabei stellt sich mir die Frage, wie man es am besten/sinnvollsten
mit einem neuen Datumswert versorgt.SYSTEMTIME sysTime; memset(&sysTime, 0, sizeof(sysTime)); sysTime.wYear = 2007; sysTime.wMonth = 10; sysTime.wDay = 08; c_datetimepicker.SetTime(&sysTime);Oder doch eher so:
c_datetimepicker.SetFormat("dd.mm.yyyy"); CTime xtime(08,10,2007);//, 0, 0, 0); c_datetimepicker.SetTime(&xtime);Muss man zwingend die letzen drei Parameter für CTime
befüllen? Oder kann man sie bedenkenlos weglassen?
-
Kann mir jemand verraten, warum diese Formatierung des Datum
nicht angenommen wird?int tag = 01; int monat = 12; int jahr = 2007; c_datetime.SetFormat("dd.MM.yyyy"); CTime xtime(tag,monat,jahr, 0, 0, 0); c_datetime.SetTime(&xtime);Meldung: Falscher Parameter.
Es geht nur so:
CTime xtime(jahr,monat,tag, 0, 0, 0); c_datetime.SetTime(&xtime);
-
@Enzodia: Ich würde die Variante dem CTime vorziehen (die Parameter des Ctor's mußt du jedoch alle angeben).
(btw, der Wert '08' ist ein Fehler - in einer Oktal-Zahl dürfen nur 0..7 verwendet werden)
@Timemaster: Die Reihenfolge der Parameter an den CTime-Konstruktor ist fest - und unabhängig davon, wie du den Wert später verwenden willst (besonders da CTime überhaupt nichts von dem vorigen SetFormat()-Aufruf bemerkt). Und weder 1 als Jahr noch 2007 als Tagesangabe liegen im jeweils zulässigen Bereich.
-
Hallo CStoll,
kann man auch "Falscher Parameter" irgendwo abfangen um darauf zu reagieren?
Es kann durchaus sein, dass die Befüllung durch den Benutzer in einem falschen
Format erfolgt (da aus einer Datei das Datum gelesen wird).
-
Du kannst die Parameter überprüfen, bevor du sie an den CTime-Konstruktor übergibst.
-
Ah, na klar

Quasi so:
if(jahr>1000 && monat<13 && tag <=31) { //datum ist ok }
-
Ja, so etwa - nur sollten die Überprüfungen schon zum Wertebereich passen, den CTime erwartet (bei Jahr ist 1970..2038 erlaubt, bei Tag und Monat solltest du auch negative Werte abfangen).
-
Danke für den HInweis. Ich werde es beachten.
Nur bis zum Jahr 2038....,das war mir auch nicht bekannt.
Warum beschränkt man sowas nur
-
Ich würde mal darauf tippen, daß im Jahr 2038 eine Überlauf im time_t auftritt

-
CStoll schrieb:
Ich würde mal darauf tippen, daß im Jahr 2038 eine Überlauf im time_t auftritt

Das ist nur der Fall wenn er VC6 benutzt. CTime in VC2005 basiert auf __time64_t und ist dieser Einschränkung nicht1unterworfen!