Datum in 3*int..Nix in der FAQ gefunden
-
Hi,
hab schon wieder ein blödes Problem.Ich habe in einer Stopuhrfunktion eienen Eintrag der mir den Wert in der Registry speichert.
m_TIME ist vom Typ CString
SPEICHERN:
AfxGetApp()->WriteProfileString("Optionen", "Stopuhr", m_TIME);Auslesen:
m_TIME= AfxGetApp()->GetProfileString("Optionen", "Stopuhr", "<defaultwert");Meine Stopuhrfunktion ist ganz einfach aufgebaut:
COnlinetimerDlg::ONSTOPUHR()
{
SEC++;if(SEC==60)
{
MIN++;
SEC=0;
}if(MIN==60)
{
STD++;
MIN=0;
}
}Ich möchte gerne nach dem Auslesen:
m_TIME= AfxGetApp()->GetProfileString("Optionen", "Stopuhr", "<defaultwert");die Variablen SEC,MIN,STD wieder hochzählen und muß also den "Auslesewert"
wieder in drei Integerwerte Formatieren.
Bin mir auch nicht ganz sicher was für ein Format nach dem auslesen in m_TIME steht.
Wenn ich nach dem Auslesen:
m_TIME.Format("%02d : %02d : %02d", STD,MIN,SEC); mache, kann ich es auch anzeigenlassen.
Hab einiges versucht , aber klappt net.HHIILLFFEE !!!
-
Was war nochmal deine Frage?
-
Noch ein Nachtrag:
Giebt es vieleicht in COleDateTime irgendwas, das es funktioniert?
Gruß
Markus
-
Ich möchte gerne nach dem Auslesen die Variablen SEC,MIN,STD wieder hochzählen und muß also den "Auslesewert"
wieder in drei Integerwerte Formatieren.
-
m_TIME.Format("%02d : %02d : %02d", STD,MIN,SEC);
das heißt zum bsp.: 15:23:02 oder??
int h,sec,min;
CString zwStr;
zwStr += m_TIME.GetAt(0);
zwStr += m_TIME.GetAt(1);
h = atoi(zwStr) //oda so ähnlich
// und so weiter
-
Markus_B schrieb:
Noch ein Nachtrag:
Giebt es vieleicht in COleDateTime irgendwas, das es funktioniert?
Gruß
MarkusKlingt ziemlich frustriert...
Ich kann eigentlich nicht klagen, es funktioniert immerhin besser als CTime.Wenn du hochzählst, wäre dann nicht COleDateTimeSpan was für dich?
Und zum Ausgeben kannst du auch das Format von COleDateTime nehmen, das spart dir die Konvertiererei.
m_tmDatum.Format(VAR_DATEVALUEONLY);
Und: Was genau funktioniert denn nicht? Ich sehe in deinem Code nirgends ein COleDateTime, nur ein CString.
-
GetProfileString gibt ein CString zurück. Und als Problembeschreibung wurde angegeben
[...]muß also den "Auslesewert" wieder in drei Integerwerte Formatieren.[...]
Ich vermute, er sucht Left, Mid und Right von CString (vorausgesetzt nach GetProfileString steht soetwas wie 14:23:17 in m_TIME) um den String zu zustückeln, und dann fehlt ihm noch atoi um aus den Fragmenten wieder Zahlen zu machen.
-
Oder man nimmt ParseDateTime.
Ich hab mal schnell ne Funkion kopiert - muss man nur anpassen.
inline bool CDatenSet::SetDatum(CString f_strDatum) { if (f_strDatum.IsEmpty()) { SetFieldNull(&m_tmDatum); return true; } return (TRUE == m_tmDatum.ParseDateTime(f_strDatum, VAR_DATEVALUEONLY)); }
Ich habe da ein Datum, keine Zeit! Also nochmal in die MSDN gucken.
-
isabeau,
genau das !!!
Wenn ich aber "ProfileInt" neheme kommt immer:C:\Dokumente und Einstellungen\Markus\Desktop\TIME\TIMEDlg.cpp(308) : error C2664: 'GetProfileIntA' : Konvertierung des Parameters 3 von 'char [13]' in 'int' nicht moeglich
-
Falls du es selbst noch nicht gesehen hast:
dein Problem ist wahrscheinlich das gleiche wie hier:
http://www.c-plusplus.net/forum/viewtopic.php?t=101420
Nicht "<defaultwert" (als String) übergeben sondern einen integer.