Die <chrono>Bibliothek befasst sich nur mit Zeit und nicht mit Datumsangaben, mit Ausnahme system_clockderjenigen, in die die Zeitpunkte konvertiert werden können time_t. Die Verwendung <chrono>für Datumsangaben wird die Dinge also nicht wesentlich verbessern. Hoffentlich bekommen wir so etwas wie chrono::datein nicht allzu ferner Zukunft.
Das heißt, Sie können <chrono>auf folgende Weise verwenden:
#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();
}
Beachten Sie, dass dies zu std::localtimeDatenrennen führen kann. localtime_roder ähnliche Funktionen sind möglicherweise auf Ihren Plattformen verfügbar.
Aktualisieren:
Mit einer neuen Version von Howard Hinnant des aktuellen Bibliothek Sie schreiben können:
#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();
}
Dies wird so etwas wie "2015-07-24 05: 15: 34.043473124 UTC" ausdrucken.
Unabhängig davon ist die Rückgabe von constObjekten mit C ++ 11 unerwünscht geworden. const Rückgabewerte können nicht verschoben werden. Ich habe auch die nachfolgende Konstante entfernt, da die nachgestellte Konstante nur für Elementfunktionen gültig ist und diese Funktion kein Mitglied sein muss.