Existe-t-il une méthode propre C/C++/STL/Boost pour convertir une chaîne de date à l'heure (en secondes)?C++ Conversion d'une chaîne de date à l'heure proprement
yyyy:mm:dd hh:mm:ss
Existe-t-il une méthode propre C/C++/STL/Boost pour convertir une chaîne de date à l'heure (en secondes)?C++ Conversion d'une chaîne de date à l'heure proprement
yyyy:mm:dd hh:mm:ss
Voir: Date/time conversion: string representation to time_t
Et: [Boost-users] [date_time] So how come there isn't a to_time_t helper func?
Donc, apparemment quelque chose comme cela devrait fonctionner:
#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();
Mais je ne pense pas que c'est beaucoup plus propre que Rob's suggestion: utiliser sscanf
pour analyser les données dans un struct tm
, puis appelez mktime
.
http://www.boost.org/doc/libs/1_39_0/doc/html/date_time.html devrait faire l'affaire.
J'allais le suggérer aussi - ptime a time_from_string() pour passer de string à ptime - mais comment aller de là à time_t? – Reunanen
Le problème avec date_time est que a) vous avez besoin de la bibliothèque (pas de version en-tête uniquement) et b) pas de support wstring. – dirkgently
Sur la plate-forme Windows, vous pouvez faire quelque chose comme ça, si vous ne voulez pas utiliser Boost:
// 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;
Si vous préférez la bibliothèque standard, vous pouvez utiliser struct tm et mktime() pour faire le même travail.
Btw, si vous vous trouvez en utilisant sscanf pour les chaînes de temps dans un struct tm, donnez un look à strptime. Il a des formats spécifiques au temps. Pour ce qui précède, vous pouvez utiliser "% Y:% m:% d% H:% M:% S" –
J'ai oublié à ce sujet, merci de me le rappeler :) – Rageous
Merci, mais une corrections rapides. La dernière ligne doit être dur.total_seconds() –
Correction, merci pour la remarque. – Reunanen