TimeStamp in long auslesen bzw. bearbeiten



  • Hallo liebe C++ler,

    Ich arbeite gerade an einen Projekt wo ich die Kalenderdaten eines Programms (David.fx) auf einer Internetseite Veröffentlichen will. Klappt auch ganz gut bis jetzt, das ein zigste was mir jetzt noch fehlt ist die Zeit/Datum anzeige.

    Ich bekomme aus einer Datei (archive.dat) die Daten über einen von Hersteller vorgegeben struct ausgelesen. In diesen struct ist die Anfangs und die Endzeit des Termins in long gespeichert (z.B. StatusTime: 1285062033, SendTime: 1285236000, StopTime: 1285246800).
    hier ein Ausschnitt des structs:

    long     StatusTime;           //Time of the log according to
                                     //the status, and the time is
                                     //coded as UCT (Unsiversal
                                     //Coordinated Time). Represents
                                     //a counter of secondes since
                                     //00:00:00 1.Jan.1970
      long     SendTime;             //Sending date for the job.
    								 //Definitions are in the following
    								 //table:
      #define ST_IMMEDIATE    -1
      #define ST_NIGHT        -2
      #define xST_DY          (-10)
      #define xST_DY_IMMEDIATE (-10)
      #define xST_DY_QUICK    (-11)
      #define xST_DY_NORMAL   (-12)
      #define xST_DY_AT_BEST  (-13)
    

    [...]

    long        StopTime;              //Calendar stop time of entry
    

    Leider weiß ich jetzt nicht wie ich den long Datentyp zu ein Vernünftiges Datum und Uhrzeit bekomme (z.B. 2010-09-16 09:30:00).

    Hoffe jemand kann mir helfen

    MFG Eles



  • lmgtfy: c++ time

    http://www.cplusplus.com/reference/clibrary/ctime/

    http://www.cplusplus.com/reference/clibrary/ctime/mktime/

    http://www.cplusplus.com/time_t

    http://www.cplusplus.com/reference/clibrary/ctime/time_t/ schrieb:

    time_t

    type
    <ctime>

    Time type
    Type capable of representing times and support arithmetical operations.

    This type is returned by the time function and is used as parameter by some other functions of the <ctime> header.

    It is almost universally expected to be an integral value representing the number of seconds elapsed since 00:00 hours, Jan 1, 1970 UTC. This is due to historical reasons, since it corresponds to a unix timestamp, but is widely implemented in C libraries across all platforms.



  • //............... Represents
                                     //a counter of secondes since
                                     //00:00:00 1.Jan.1970
    

    http://en.wikipedia.org/wiki/Unix_time
    http://linux.die.net/man/3/ctime



  • Vielen dank für die Links, habe es endlich hin bekommen! Ist eigentlich recht simple wenn man weiß wie 🙄

    Hier mal meine Lösung (vielleicht verbesserungswürdig aber funktioniert^^)

    time_t     now;
      struct tm  *ts;
      char       buf[80];
    
      now = TSR.SendTime;
      ts = localtime(&now);
      strftime(buf, sizeof(buf), "%Y-%m-%d %H:%M:%S %Z", ts);
      Memo1->Lines->Add("SendTime: "+String(buf));
      now = TSR.StopTime;
      ts = localtime(&now);
      strftime(buf, sizeof(buf), "%Y-%m-%d %H:%M:%S %Z", ts);
      Memo1->Lines->Add("StopTime: "+String(buf));
    

    Wenn jemand eine besser oder kürzere Version hat, immer her damit^^



  • Da du ein Memo verwendest gehe ich davon aus, dass du irgendeinen Borland Compiler einsetzt. Die VCL hat einige Funktionen, die den Umgang mit Zeitstempel erleichtern.

    AnsiString StartTime = UnixToDateTime( TSR.SendTime ).DateTimeString();
    

    Statt DateTimeString() kann Format() benutzt werden, das den Zeitstempel entsprechend eines Formatstrings formatiert.



  • Leider gibt es die Funktion UnixToDateTime() nicht, oder muss ich dazu eine besondere Bibliothek includen?



  • Doch die gibts, taucht sogar in der Hilfe auf. Du musst dazu <DateUtils.hpp> inkludieren.


Anmelden zum Antworten