[VC6] Zeitstempel String in time_t OHNE MFC
-
Hallo zusammen,
bin mal wieder am verzweifeln.
Ich brauche eine Konvertierung von einem Zeitstempel im Formatdd.mm.yyyy hh
ssin time_t, also die vergangenen Sekunden seit 01.01.1970 00:00:00.
Von allen möglichen Formen (SYSTEMTIME, FILETIME etc) in Strings gibt's haufenweise Lösungen. Aber ich find nix passendes in der anderen Richtung. Per CTime würd es schnell gehen, aber das wär absolut der letzte Weg da ich versuch möglichst wenig MFCs zu verwenden (Scho klar das hier das MFC-Unterforum ist. Aber auch Visual C++.).
Hintergrund:
Les einen String in og Format ein und muss damit werkeln.Hat wer 'nen Tip?
m
-
Mit mktime (http://www.cplusplus.com/reference/clibrary/ctime/mktime.html) kannst du aus einem struct tm ein time_t machen. Den String könntest du mit stringstream oder sscanf parsen.
-
Die struct tm hat ich nach mangels Infos (tm_wday, tm_yday, tm_isdst) nach hinten in mein Hirnkasterl geschoben. Hab gmeint das mir dann mktime(...) zerbröselt. Hätt ich's mal einfach ausprobiert!
// string to seconds since 1/1/70 CTime tmr ( (WORD)atoi("2008"),// year (WORD)atoi("11"),// month (WORD)atoi("14"),// day (WORD)atoi("10"),// hour (WORD)atoi("30"),// min (WORD)atoi("00") );// sec printf( "Time in seconds since UTC 1/1/70:\t%ld\n", tmr.GetTime() ); struct tm timeinfo; memset ( &timeinfo, 0, sizeof ( struct tm ) ); timeinfo.tm_year = atoi("2008") - 1900; timeinfo.tm_mon = atoi("11") - 1; timeinfo.tm_mday = atoi("14"); timeinfo.tm_hour = atoi("10"); timeinfo.tm_min = atoi("30"); timeinfo.tm_sec = atoi("00"); printf( "Time in seconds since UTC 1/1/70:\t%ld\n", mktime ( &timeinfo ) );Danke für den Tip, ihoernchen!
m
-
BTW:
1. Gehört CTime seit VC200x nicht mehr zur MFC sondern in di ATL Klassen und kann ohne Overhead genutzt werden.
2. Effektiver als CTime ist bei weitem COleDateTime. Auch damit lassen sich Sekunden seit... easy errechnen. Und auch COleDateTime gehört zur ATL, desweiteren gibt es genug Konvertierungs Funktionen aus dem COM Bereich.