PDA

View Full Version : Timewert von API stat() als ttmmjjjj



elmaro
07-03-07, 10:07
Hallo liebes Forum,

ich arbeite mich gerade in die API rein - mittels opendir, readdir, stat lese ich den Inhalt eines Verzeichnises im IFS aus.

Das funktioniert auch soweit, die stat Funktion liefert u.a. den Wert time_t --> Time of last data modification.

:confused:
Nun meine Frage:
Wie kann ich diesen Wert (sind ja anscheinend anzahl Sekunden seit xxx) in einen Datum / Zeit Wert umwandeln, den ich dann in einem RPG Programm weiterverarbeiten kann ??

Ein kleines Beispiel wäre super.
Danke.

Fuerchau
07-03-07, 11:30
Dazu dient dann die C-Funktion "struct tm* localtime(time_t time);"
Diese berücksichtigt dann auch QUTCOFFSET korrekt.

Frank Hildebrandt
07-03-07, 11:36
Hallo,

time_t ist der Typ. Hier die verschiedenen Datumswerte, die "stat" liefert.



time_t st_atime The most recent time the file was accessed.


time_t st_mtime The most recent time the contents of the file were changed.


time_t st_ctime The most recent time the status of the file was changed


Hier eine C-Funktion, welche aus st_mtime ein Datum im Format JJJJMMTT macht.



long int RetrieveEntryAccessTime(char *path) {
struct stat info;
struct tm date;
if (stat(path, &info) != 0)
return -1;
else {
localtime_r(&info.st_mtime, &date);
return (date.tm_mday) + ((date.tm_mon + 1) * 100) + ((date.tm_year + 1900) * 10000);
}
}


Wenn Du ein anderes Datum willst, dann musst Du nur st_mtime auswechseln.

elmaro
07-03-07, 13:14
Vielen Danke für die hilfe,

versuche mal mein Glück mit dem Befehl ADDDUR, wenn das nicht klappt, werde ich auf C umsteigen.

Spateneder
12-03-07, 13:44
Hallo,
die Unix-APIs liefern alle Zeitangaben in Sekunden seit "The Epoch" (01.01.1970 00:00:00). Für die Umrechnung wirst Du nicht ernsthaft einen Tip erwarten, denke ich (%DIFF, falls doch ...).
MfG
M. Spateneder

Fuerchau
12-03-07, 14:39
Die C-Funktion localtime() rechnet den Time-Wert (1.1.1970) unter Berücksichtigung von QUTCOFFSET in eine lokale Zeit um.
Dies ist deshalb notwendig, da stat() den um QUTCOFFSET korrigierten Zeitwert (GMT-Zeit) liefert.

Mit ADDDUR kommt man nur dann zurecht, wenn man eben selber QUTCOFFSET berücksichtigt.

Neuerdings (ab V5R3) wird allerdings auch eine USER-Zeit über eine Umgebungsvariable ermöglicht, deren Wert von QUTCOFFSET abweichen kann.
stat() verwendet diesen Wert.

Also wäre localtime() auf jeden Fall die bessere Wahl.