004
01.07.2007, 21:50 Uhr
0xdeadbeef
Gott (Operator)
|
Weder strdate noch strtime sind im Standard enthalten. Standardkonform wäre zum Beispiel
C++: |
#include <ctime> #include <iostream> #include <string>
int main() { std::time_t time = std::time(0); std::string s = std::ctime(&time);
std::cout << s << std::endl; }
|
Wenn dir das Format von ctime nicht gefällt, Benutz
C++: |
std::tm tm_time = *std::localtime(&time);
|
Das gibt dir ein struct tm, das die Datumsinformationen schön aufgespaltet enthält - davon kannstes dir dann zusammensetzen wie du willst:
C++: |
struct tm { int tm_sec; /* seconds */ int tm_min; /* minutes */ int tm_hour; /* hours */ int tm_mday; /* day of the month */ int tm_mon; /* month */ int tm_year; /* year */ int tm_wday; /* day of the week */ int tm_yday; /* day in the year */ int tm_isdst; /* daylight saving time */ };
|
Dann halt z.B.
C++: |
#include <sstream>
// ...
std::ostringstream osstr; osstr << tm_time.tm_year << '-' << tm_time.tm_mon << '-' << tm_time.tm_mday; std::string datum = osstr.str();
|
Vielleicht noch anzumerken, std::localtime benutzt einen internen statischen Buffer - deswegen leg ich auch ne Kopie an. Weitere Aufrufe von std::localtime verändern den statischen Buffer, das macht die Funktion nicht threadsicher. In POSIX gibt es zusätzlich noch localtime_r, das einen Zeiger auf ein struct_tm entgegennimmt, in den dann das Datum hineingeschrieben wird, allerdings weiß ich nicht, ob das unter Windows ebenfalls vorhanden ist. Würd mich nicht wundern, wenns da _localtime_r heißt oder so. -- Einfachheit ist Voraussetzung für Zuverlässigkeit. -- Edsger Wybe Dijkstra Dieser Post wurde am 01.07.2007 um 21:56 Uhr von 0xdeadbeef editiert. |