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ß
    Markus

    Klingt 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.


Anmelden zum Antworten