# Unix Timestamp in Datum umrechnen



## Paper (6. Oktober 2011)

Hallo leute ich muss nochmal nerven 
Ich habe ein Problem und zwar schaff ich es nicht einen Unix Timestamp in ein lesbares Datum und Uhrzeit zu konvertieren. :/ ich verzweifel da schon. Ich bin überhaupt nicht C++ begabt  

Kann mir einer bitte helfen?

Gruß Paper


----------



## deepthroat (6. Oktober 2011)

Hi.

Was funktioniert denn nicht?

Siehe z.B. http://www.cplusplus.com/reference/clibrary/ctime/strftime/

Gruß


----------



## Paper (6. Oktober 2011)

deepthroat hat gesagt.:


> Was funktioniert denn nicht?




Ich habe keine Ahnung wie ich das machen soll. Mein Code sieht bis jetzt so aus.


```
ifstream file;
file.open ("squid1.log");


//Prüft ob file offen ist
if (file.is_open()) {
  string TiSt;

//Ließt den ersten String und ignoriert den Rest
  while (file >> TiSt && file.ignore(numeric_limits<streamsize>::max(), '\n')) {
    cout <<TiSt << endl;
    
  }
}


//Fehler ausgabe wenn die Datei nicht geöffnet/gefunden werden kann
if (!file.eof()) {
                cerr << "Fehler beim ausgeben der Datei.";}
                
else {

//Wenn die Datei geöffnet/gefunden wurde                
cout <<endl <<endl;
cout <<"\t Zum schliessen druecken Sie Enter" <<endl <<endl;  }
```

und ich muss es halt i.wie schaffen "TiSt" (was ja den Timestamp beinhaltet) weiter zu verwenden und das umzuwandeln und mirhalt wieder anzeigen zulassen. Da hab ich halt überhaupt keine Ahnung wie ich das anstellen soll. Programmieren ist garnicht meins


----------



## Paper (6. Oktober 2011)

Ich habe mir mal das hier zusammen gebastelt  ist das wenigstens ein kleiner lösungsansatz?


```
char buffer[80]; 


time_t TiSt;
struct tm * timeinfo;


time (&TiSt);
timeinfo = localtime (&TiSt);
strftime(buffer, sizeof(80), "[%H:%M:%S %m/%d/%Y]", localtime(&TiSt));
puts (buffer);
cout << TiSt;
```


----------



## Paper (6. Oktober 2011)

Hab was anderes versucht jetzt bekomme ich wenigstens ein Datum. 
Folgender Code: 


```
time_t TiSt = time (NULL);
struct tm * timeinfo = localtime ( &TiSt );
printf ("%02d.%02d.%04d\n", timeinfo->tm_mday, timeinfo->tm_mon, timeinfo->tm_year+1900);
```

jetzt muss ich da nur noch eine Uhrzeit hinbekommen  und das ganze halt bis zum ende des Accesslogs 

korrektur: das Datum ist falsch -.- xD


----------



## Paper (6. Oktober 2011)

Ich hab es für die Uhrzeit mal ähnlich versucht und es sieht momentan so aus


```
time_t TiSt = time (NULL);
struct tm * timeinfo = localtime ( &TiSt );

//Datum anzeigen
printf ("%02d.%02d.%04d", timeinfo->tm_mday, timeinfo->tm_mon, timeinfo->tm_year+1900);

//Uhrzeit anzeigen
printf ("%H:%M:%S", timeinfo->tm_hour, timeinfo->tm_min, timeinfo->tm_sec);
```

jedoch Stürzt mein Programm ab wenn ich das mit der Uhrzeit reinbringe, wenn ich es weg lasse funktioniert es super. Das ist vielleicht ein mist eh


----------



## deepthroat (6. Oktober 2011)

Hi.

Du mußt doch nun wirklich nur mal den Beispielcode in dem Link den ich dir gegeben habe anschauen.

sizeof(80) macht keinen Sinn.

%H %M %S bedeutet bei printf etwas ganz anderes als bei strftime.


```
strftime (buffer,80,"%H:%M:%S %m/%d/%Y",timeinfo);
```
Gruß


----------



## Paper (6. Oktober 2011)

Diese geschichte mit dem sizeof(80) nutz ich nichtmehr  hab ich selbst gesehen das es i.wie schwachsinn war, habe da nicht nachgedacht. 

Zur Zeit sieht mein Code für das Datum so aus


```
time_t TiSt = time (NULL);
struct tm * timeinfo = localtime ( &TiSt );

//Datum anzeigen
printf ("%02d.%02d.%04d", timeinfo->tm_mday, timeinfo->tm_mon, timeinfo->tm_year+1900);
```


----------



## deepthroat (6. Oktober 2011)

Paper hat gesagt.:


> Zur Zeit sieht mein Code für das Datum so aus


Das ist doch der gleiche Code wie in Beitrag 5 und 6.

Verwende einfach strftime.

Gruß


----------



## Paper (6. Oktober 2011)

Das gibt mir nur die aktuelle Uhrzeit und das aktuelle Datum aus. Ich muss es aber so machen das die werte einer .log Datei in ein Datum und eine Uhrzeit umgewandelt werden. Vielleicht habe ich mein Problem doof erklärt oder heute ist einfach nicht mein Tag.


----------



## deepthroat (6. Oktober 2011)

Paper hat gesagt.:


> Das gibt mir nur die aktuelle Uhrzeit und das aktuelle Datum aus. Ich muss es aber so machen das die werte einer .log Datei in ein Datum und eine Uhrzeit umgewandelt werden.


Dann mußt du dir ja erstmal das Datum (welches? mtime, atime, ctime?) der Datei besorgen.

Das geht z.B. mit stat. http://linux.die.net/man/2/stat

Gruß


----------



## Paper (7. Oktober 2011)

So ein neuer Tag heute wird alles besser  vielleicht hab ich es doof erklärt.
In der Datei sind Unix timestamps eingetragen diese soll ich mir als Uhrzeit und Datum umrechnen lassen. Ich habe diese Timestamps als string momentan und den würde ich weiter verwenden um mir das umrechnen zulassen. wenn das geht


----------



## deepthroat (7. Oktober 2011)

Hi.

Also hast du eine Ziffernfolge in einem String?

Dann könntest du sscanf verwenden um diese z.B. in einen double zu verwandeln.

Dann castest du diesen double in einen time_t und rechnest damit weiter.

Gruß


----------

