En <chrono>
ne traite que du temps et non des dates, à l'exception de l'option system_clock
qui a la capacité de convertir ses points de temps en time_t
. Ainsi, en utilisant <chrono>
pour les dates n'améliorera pas beaucoup les choses. Espérons que nous obtiendrons quelque chose comme chrono::date
dans un avenir pas trop lointain.
Cela dit, vous pouvez utiliser <chrono>
de la manière suivante :
#include <chrono> // chrono::system_clock
#include <ctime> // localtime
#include <sstream> // stringstream
#include <iomanip> // put_time
#include <string> // string
std::string return_current_time_and_date()
{
auto now = std::chrono::system_clock::now();
auto in_time_t = std::chrono::system_clock::to_time_t(now);
std::stringstream ss;
ss << std::put_time(std::localtime(&in_time_t), "%Y-%m-%d %X");
return ss.str();
}
Notez que std::localtime
peut provoquer des courses de données. localtime_r
ou des fonctions similaires peuvent être disponibles sur vos plateformes.
Mise à jour :
En utilisant une nouvelle version de Howard Hinnant. bibliothèque de dates vous pouvez écrire :
#include "date.h"
#include <chrono>
#include <string>
#include <sstream>
std::string return_current_time_and_date() {
auto now = std::chrono::system_clock::now();
auto today = date::floor<days>(now);
std::stringstream ss;
ss << today << ' ' << date::make_time(now - today) << " UTC";
return ss.str();
}
Cela donnera quelque chose comme "2015-07-24 05:15:34.043473124 UTC".
Sur une note sans rapport, le retour const
est devenu indésirable avec C++11 ; les valeurs de retour const ne peuvent pas être déplacées. J'ai également supprimé la terminaison const car la terminaison const n'est valable que pour les fonctions membres et cette fonction n'a pas besoin d'être membre.