Zeitfunktionen



  • Hi,

    ich würde gerne nen Timestamp für eine Messwerterfassung basteln und komme nicht weiter.

    Ich bin soweit gekommen dass ich die time.h gefunden habe mit der ich auch wunderbar an die Zeit komme. Ich hätte gerne eine Formatierte Ausgabe und benutze deshalb strftime. Folgendes Codebeispiel läuft wunderbar:

    time_t rawtime;
          struct tm * timeinfo;
          char buffer [80];
          time ( &rawtime );
          timeinfo = localtime ( &rawtime );
          return strftime(buffer,80,"%x:%X",timeinfo);
    

    Ich würde aber gerne eine Funktion daraus basteln weil ich das doch ziemlich häufig brauche.

    Mein Ansatz war dann folgender:

    String getTimestamp(){
    
    	  time_t t;
    	  struct tm * timeinfo;
    	  char buffer [80];
    	  time (&t);
    	  timeinfo = localtime (&t);
    	  String Time = strftime(buffer,80,"%x:%X",timeinfo);
    	  return Time;
    
    }
    

    ich bekomme dann immer String is not declared in this scope. ich habe <string.h> eingebunden.

    Die Funktion soll mir als Rückgabewert das Datum und die Zeit in Form eines Strings liefern.
    Kann mir evtl jemand auf die Sprünge helfen?

    Danke schonmal für eure Antworten!


  • Mod

    Die Klasse heißt std::string. Falls du ein using namespace std im Code haben solltest, dann brauchst du zwar das std:: nicht, aber trotzdem wird die Klasse klein geschrieben (wie alles in der Standardbibliothek!).

    Der Header string.h hat mit der Stringklasse aber gar nichts zu tun. string.h ist ein veralteter Name für das was jetzt in cstring steht. Der Name des Headers für die Stringklasse ist string .

    edit: Und time.h ist übrigens veraltet für ctime .



    1. heißt es nicht time.h, sondern ctime (du programmierst doch C++, oder?)
    2. selbes gilt für string.h -> cstring.
    3. ist (2) immer noch der falsche Header, wenn du die Klasse std::string suchst ("String" gibt es in C++ nicht). std::string bekommst du mit #include <string>. <cstring> liefert Funktionen, um mit rohen Strings zu arbeiten (zerstückeln, zusammenbasteln, usw.)


  • OK. Eigentlich habe ich auch string als Header und jetzt auch noch ctime.
    Jedoch löst das mein Problem nicht. Es geht nach wie vor nicht.
    Ich verstehe das Problem nicht dass ich habe. Ich brauche entweder ein char oder ein string als Rückgabewert der Funktion.

    ich habe es auch so probiert:

    char getTimestamp(){
    
    	  time_t t;
    	  struct tm * timeinfo;
    	  char buffer [80];
    	  time (&t);
    	  timeinfo = localtime (&t);
    	  char Time = strftime(buffer,80,"%x:%X",timeinfo);
    	  return Time;
    
    }
    
    int main() {
    
    char Test = getTimestamp();
    printf("Time", Test);
    

    Das läuft zwar aber gibt mir nur Time aus, jedoch weder Zeit noch Datum.



  • oNes schrieb:

    char Time = strftime(buffer,80,"%x:%X",timeinfo);
    

    Das ist der Fehler. char = 1 Zeichen ... go figure...


  • Mod

    Du gibst ja hier auch einen char zurück. Das ist ein einzelnes Zeichen. Und diesem weißt du den Wert 0 zu (den Rückgabewert von strftime). Deshalb wird natürlich auch nichts ausgegeben.



  • ok, das erklärt natürlich einiges..
    Aber wie schaffe ich es dann das Datum in einen String abgelegt wird?
    Ich habe es so Probiert:

    string getTimestamp() {
    
              time_t t;
              struct tm * timeinfo;
              char buffer [80];
              time (&t);
              timeinfo = localtime (&t);
              strftime(buffer,80,"%x:%X",timeinfo);
    
              return buffer;
    
                         }
    
    int main() {
    
    string Test = getTimestamp();
    printf("e", Test);
    

    aber da kommt leider garnichts raus. Er kompiliert zwar,aber steigt dann sofort aus. Sehe ich das richtig dass das Datum in "buffer" abgelegt wird? strftime formatiert mir ja nur meine localtime welche ich in timeinfo abgelegt habe?


  • Mod

    Du kannst printf nicht mit std::string zusammen benutzen. Benutze Ausgabestreams wie es sich in C++ gehört. Wie das geht, findest du in jedem Hello-World Programm zu C++.



  • habs gelöst:

    string getTimestamp() {
    
    		  time_t t;
    		  struct tm * timeinfo;
    		  char buffer [80];
    		  time (&t);
    		  timeinfo = localtime (&t);
    		  strftime(buffer,80,"%X",timeinfo);
    		  string value;
    		  value = buffer;
    		  return value;
    
    					 }
    int main(){
    .
    .
    string Time;
    Time=getTimestamp();
    cou<<Time;
    

    passt!
    Danke



  • Du magst es umständlich, sehe ich das richtig? 😉

    struct tm * timeinfo;
    // ...
    timeinfo = localtime (&t);
    

    ➡

    tm* timeinfo = localtime(&t);
    
    string value; 
    value = buffer; 
    return value;
    

    ➡

    return buffer;
    
    string Time;
    Time=getTimestamp();
    

    ➡

    string Time = getTimestamp();
    

Log in to reply