time() in String konvertieren

Schnelle objektorientierte, kompilierende Programmiersprache.
Antworten
Benutzeravatar
hackmack
Beiträge: 85
Registriert: Do Mär 26, 2009 10:16 pm

time() in String konvertieren

Beitrag von hackmack » Sa Jun 06, 2009 1:45 pm

Hi,

ich wollte die Aktuelle Uhrzeit (inlusive Datum) in einen String speichern und diesen dann testweise ausgeben. Die Form, in der das Datum im String gespeichert wird, sollte so aussehen:

Sun, 06 Nov 1994 08:49:37 GMT

Dazu jetzt mal der folgende Code:

Code: Alles auswählen

    string Date;
    time_t seconds;
    seconds = time(NULL);
    string weekday_values[] = {"Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"};
    string month_values[] = {"Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Ocr", "Nov", "Dec"};
    std::tm *datetimeinfo;
    datetimeinfo = std::localtime(&seconds);


    //Generate a String with the time in the format "Sat, 6 Jan 2009 08:24:56 GMT"
    Date += weekday_values[datetimeinfo->tm_wday];
    Date += " ";
    Date += datetimeinfo->tm_mday;
    Date += " ";
    Date += month_values[datetimeinfo->tm_mon];
    Date += " ";
    Date += (1990 + datetimeinfo->tm_year);
    Date != " ";
    Date += datetimeinfo->tm_hour;
    Date += ":";
    Date += datetimeinfo->tm_min;
    Date += ":";
    Date += datetimeinfo->tm_sec;
    Date += " GMT";

    cout << Date;
Der Code lässt sich soweit auch prima compilieren, bloß is die Ausgabe etwas kryptisch:

Sun ♠ Jun 3♫:▼:♣ GMT

Dies liegt meiner Vermutung nach an den Zeilen wie dieser hier "datetimeinfo->tm_sec" die ihre Werte als int übergeben, und somit das Zeichen mit dem entsprechenden Zahlenwert aus dem ASCII Zeichensatz genommen wird. Wie mach ich dies jetzt so, dass die Zahl richtig angezeigt und in den String geschrieben wird (am besten mit führenden Nullen)?

Eine Möglichkeit wäre die ganzen Zahlen in Array zu speichern, gibt es bessere?

Code: Alles auswählen

string Zahlen[] = {"01", "02", "03", ...};
Betriebsystem wäre Windows und Compiler GCC (bzw. MinGW).

Mfg.
hackmack
They say, if you play a Microsoft CD backwards, you hear satanic messages. Thats nothing, cause if you play it forwards, it installs Windows.

Benutzeravatar
cloidnerux
Moderator
Beiträge: 3125
Registriert: Fr Sep 26, 2008 4:37 pm
Wohnort: Ram (Gibts wirklich)

Re: time() in String konvertieren

Beitrag von cloidnerux » Sa Jun 06, 2009 1:57 pm

In der Tat liegt das Problem beid er zuweisung eines Ints.
Du musst diesen in ein text konvertieren oder über den Array.
Eine führende 0 hilft dir nichts.
In der Standard Bibilothek stdio.h sind die Befehle atoi und itoa definiert.
atoi konvertiert einen Text zu einer Zahl,
ito eine Zahl zu einem Text.
Oder du bastelst dir selber eine Funktion zum umwandeln von Zalen nach Text, das ist nicht einmal so schwer.
Redundanz macht wiederholen unnötig.
quod erat expectandum

Benutzeravatar
hackmack
Beiträge: 85
Registriert: Do Mär 26, 2009 10:16 pm

Re: time() in String konvertieren

Beitrag von hackmack » Sa Jun 06, 2009 2:08 pm

Da ich einen kleinen Webserver (erstmal nur zum schicken von Texten) programmieren will, sollte dies auch einigermaßen nach dem Standard sein, und dieser gibt halt nunmal die führende Null vor (für die Übertragung des Datum in den Header-Daten) :)
They say, if you play a Microsoft CD backwards, you hear satanic messages. Thats nothing, cause if you play it forwards, it installs Windows.

Benutzeravatar
cloidnerux
Moderator
Beiträge: 3125
Registriert: Fr Sep 26, 2008 4:37 pm
Wohnort: Ram (Gibts wirklich)

Re: time() in String konvertieren

Beitrag von cloidnerux » Sa Jun 06, 2009 2:11 pm

Achso.
Dann kannst du doch einfach in ein Text konvertieren und eine "0" am anfang einfügen, aber halt nur wenns nötig ist.
Redundanz macht wiederholen unnötig.
quod erat expectandum

Benutzeravatar
hackmack
Beiträge: 85
Registriert: Do Mär 26, 2009 10:16 pm

Re: time() in String konvertieren

Beitrag von hackmack » Sa Jun 06, 2009 2:15 pm

Ich schreib grad mal ne kleine Funktion, und werde sie posten, wenn sie fertig ist und funktioniert.
They say, if you play a Microsoft CD backwards, you hear satanic messages. Thats nothing, cause if you play it forwards, it installs Windows.

Benutzeravatar
Kerli
Beiträge: 1456
Registriert: So Jul 06, 2008 10:17 am
Wohnort: Österreich
Kontaktdaten:

Re: time() in String konvertieren

Beitrag von Kerli » Sa Jun 06, 2009 2:29 pm

hackmack hat geschrieben:ich wollte die Aktuelle Uhrzeit (inlusive Datum) in einen String speichern und diesen dann testweise ausgeben.
Warum nimmst du denn nicht strftime aus der Standardbibliothek?
"Make it idiot-proof and someone will invent an even better idiot." (programmers wisdom)

OpenGL Tutorials und vieles mehr rund ums Programmieren: http://www.tomprogs.at

Benutzeravatar
hackmack
Beiträge: 85
Registriert: Do Mär 26, 2009 10:16 pm

Re: time() in String konvertieren

Beitrag von hackmack » Sa Jun 06, 2009 2:50 pm

ah, danke, genau sowas habe ich gesucht
They say, if you play a Microsoft CD backwards, you hear satanic messages. Thats nothing, cause if you play it forwards, it installs Windows.

Benutzeravatar
hackmack
Beiträge: 85
Registriert: Do Mär 26, 2009 10:16 pm

Re: time() in String konvertieren

Beitrag von hackmack » So Jun 07, 2009 9:34 pm

habe trotzdem mal noch meine Konverterfunktion fertig geschrieben. Funktioniert auch soweit, nur für den Fall das sie jemand interessiert:

Code: Alles auswählen

string IntToString (int zahl)
{
    string data;
    int hoechst = floor(log10(zahl)); //Berechnet größten ganzen Exp. mit der 10 potenziert kann, um "zahl" zu erhalten
    int digit;
    for (int i=hoechst;i >= 0;i--)
    {
        digit = floor(zahl/(pow(10, i))); //Bestimmt die am linkesten stehende Ziffer
        data += char('0') + digit;
        zahl -= floor(pow(10,i)) * digit; //>Löscht< die am linkesten stehende Ziffer
    }
    return data;
};
They say, if you play a Microsoft CD backwards, you hear satanic messages. Thats nothing, cause if you play it forwards, it installs Windows.

Antworten