Gibt es eine C/C++/STL/Boost-Clean-Methode zum Konvertieren einer Datum-Uhrzeit-Zeichenfolge in Epochzeit (in Sekunden)?C++ Konvertieren einer Datetime-Zeichenfolge sauber in Epoch
yyyy:mm:dd hh:mm:ss
Gibt es eine C/C++/STL/Boost-Clean-Methode zum Konvertieren einer Datum-Uhrzeit-Zeichenfolge in Epochzeit (in Sekunden)?C++ Konvertieren einer Datetime-Zeichenfolge sauber in Epoch
yyyy:mm:dd hh:mm:ss
See: Date/time conversion: string representation to time_t
Und: [Boost-users] [date_time] So how come there isn't a to_time_t helper func?
Also, anscheinend so etwas wie dies funktionieren soll:
#include <boost/date_time/posix_time/posix_time.hpp>
using namespace boost::posix_time;
std::string ts("2002-01-20 23:59:59");
ptime t(time_from_string(ts));
ptime start(gregorian::date(1970,1,1));
time_duration dur = t - start;
time_t epoch = dur.total_seconds();
Aber ich glaube nicht, es ist viel sauberer als Rob's suggestion: sscanf
verwenden zu analysieren die Daten in eine struct tm
und rufen Sie dann mktime
.
http://www.boost.org/doc/libs/1_39_0/doc/html/date_time.html sollte es tun.
Ich wollte das auch vorschlagen - ptime hat time_from_string() um von String zu ptime zu wechseln - aber wie geht es von dort nach time_t? – Reunanen
Das Problem mit date_time ist, dass a) Sie die Bibliothek (keine Header-only-Version) und b) keine wstring-Unterstützung benötigen. – dirkgently
Auf Windows-Plattform können Sie etwas tun, wenn nicht-Boost verwenden möchten:
// parsing string
SYSTEMTIME stime = { 0 };
sscanf(timeString, "%04d:%02d:%02d %02d:%02d:%02d",
&stime.wYear, &stime.wMonth, &stime.wDay,
&stime.wHour, &stime.wMinute, &stime.wSecond);
// converting to utc file time
FILETIME lftime, ftime;
SystemTimeToFileTime(&stime, &lftime);
LocalFileTimeToFileTime(&lftime, &ftime);
// calculating seconds elapsed since 01/01/1601
// you can write similiar code to get time elapsed from other date
ULONGLONG elapsed = *(ULONGLONG*)&ftime/10000000ull;
Wenn Sie Standardbibliothek bevorzugen, können Sie struct tm und mktime() verwenden, um die gleiche Arbeit zu tun.
Btw, wenn Sie finden, dass Sie sscanf für Zeitzeichenfolgen in eine Struktur tm verwenden, geben Sie strptime einen Blick. Es hat einige zeitspezifische Formate. Für die oben genannten könnten Sie "% Y:% m:% d% H:% M:% S" –
Ich habe das vergessen, danke für die Erinnerung :) – Rageous
Danke, aber eine schnelle Korrekturen. Letzte Zeile sollte dur.total_seconds() sein –
Behoben, danke für die Bemerkung. – Reunanen