Datum in String auffangen



  • Ich habe folgende Funktion gefunden:

    #include <iostream>
    using namespace std;
    #include <time.h>
    
    void main()
    {
        time_t Zeitstempel;
        tm *nun;
        Zeitstempel = time(0);
        nun = localtime(&Zeitstempel);
        cout << nun->tm_mday << '.' << nun->tm_mon+1 << '.'
            << nun->tm_year+1900 << " - " << nun->tm_hour
            << ':' << nun->tm_min << endl;
    }
    

    Würde jetz aber gern statt der cout Anweisung einen String mit dem Datum belegen. Ist das möglich? bzw wie?
    Ich brauche das Datumsformat folgendermassen in dem String yyyymmdd hhmm

    mfg



  • Wenn es sich bei den Datentypen (sorry, keine Ahnung, was es für Datentypen in tm sind) um Strings handelt, könntest du sie einfach zusammen in einen mit strcpy(); oder strcat(); schreiben, ansonsten würde ich eine Konvertierung zu char [] oder string vornehmen und sie dann auf einen einzelnen String umkopieren.

    habs getestet, die Datentypen sind int bei den Zahlen.
    Von daher konvertieren in char und mittels strcpy/strcat in ein char-Array kopieren



  • time.h schrieb:

    struct tm
    {
      int tm_sec;                   /* Seconds.     [0-60] (1 leap second) */
      int tm_min;                   /* Minutes.     [0-59] */
      int tm_hour;                  /* Hours.       [0-23] */
      int tm_mday;                  /* Day.         [1-31] */
      int tm_mon;                   /* Month.       [0-11] */
      int tm_year;                  /* Year - 1900.  */
      int tm_wday;                  /* Day of week. [0-6] */
      int tm_yday;                  /* Days in year.[0-365] */
      int tm_isdst;                 /* DST.         [-1/0/1]*/
    
    #ifdef  __USE_BSD
      long int tm_gmtoff;           /* Seconds east of UTC.  */
      __const char *tm_zone;        /* Timezone abbreviation.  */
    #else
      long int __tm_gmtoff;         /* Seconds east of UTC.  */
      __const char *__tm_zone;      /* Timezone abbreviation.  */
    #endif
    };
    

    es handelt sich also um ints
    naja man könnte in char* konvertieren(zB über nen stringstream) und denn einfach zu einem string mittels += hinzufügen



  • Vorden schrieb:

    Wenn es sich bei den Datentypen (sorry, keine Ahnung, was es für Datentypen in tm sind) um Strings handelt, könntest du sie einfach zusammen in einen mit strcpy(); oder strcat(); schreiben, ansonsten würde ich eine Konvertierung zu char [] oder string vornehmen und sie dann auf einen einzelnen String umkopieren.

    Warum so kompliziert?

    @Nicor:

    1. bzg. void main()

    2. Wie wärs mit stringstreams?
    Beispiel:

    #include <iostream>
    #include <sstream> // Der header ist neu.
    #include <ctime>
    using namespace std;
    
    int main()
    {
        time_t Zeitstempel;
        tm *nun;
        Zeitstempel = time(0);
        nun = localtime(&Zeitstempel);
    
        // erzeuge ein ostringstream objekt.
        ostringstream ostream;
    
        // schreibe alles in den buffer von ostream.
        ostream << nun->tm_mday << '.' << nun->tm_mon+1 << '.'
            << nun->tm_year+1900 << " - " << nun->tm_hour
            << ':' << nun->tm_min;
    
        // konvertiere den kompletten Inhalt (der z.Z. im buffer von ostream steht)
        // nach std::string    
        string s = ostream.str();
        cout << "\n s: " << s << "\n\n";
        return 0;
    }
    

    /edit: zu spät...

    Caipi



  • Es handelt sich eigentlich um eine C-Frage, ich denke, das einfachste waere wenn Du die strftime-Funktion benutzen wuerdest (eine aehnliche Frage war unlaengst im ANSI-C-Forum);

    char   szTimeStr [100]; /* 100 sollte hier vollkommen ausreichen */
    
        time_t Zeitstempel;
        tm *nun;
        Zeitstempel = time(0);
        nun = localtime(&Zeitstempel);
    
        strftime(szTimeStr, 100, ... /* Formatstring: selber definieren - s.u. */, 
                                   nun);
        cout << szTimeStr;
    

    Fuer den Formatstring solltest Du entweder den ANSi-Standard oder ein anderes C-Referenzbuch heranziehen.



  • MBCS-CITP schrieb:

    Es handelt sich eigentlich um eine C-Frage, ich denke, das einfachste waere wenn Du die strftime-Funktion benutzen wuerdest (eine aehnliche Frage war unlaengst im ANSI-C-Forum);

    char   szTimeStr [100]; /* 100 sollte hier vollkommen ausreichen */
    
        time_t Zeitstempel;
        tm *nun;
        Zeitstempel = time(0);
        nun = localtime(&Zeitstempel);
    
        strftime(szTimeStr, 100, ... /* Formatstring: selber definieren - s.u. */, 
                                   nun);
        cout << szTimeStr;
    

    Fuer den Formatstring solltest Du entweder den ANSi-Standard oder ein anderes C-Referenzbuch heranziehen.

    Seit wann benutzt man in C cout ? Hab da in C eher was von printf gehört ...



  • Nein, aber aber, da er offensichlich mit Streams arbeiten will, habe ich cout benutzt. Ich persoenlich haette - auch in C++ - ein printf hingeschmiert. Aber ich will jetzt keine Diskussion uber das Fuer und Wieder der stdio.h vs. iostream starten.


Anmelden zum Antworten