Die <chrono>
Bibliothek befasst sich nur mit Zeit und nicht mit Datumsangaben, mit Ausnahme system_clock
derjenigen, 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::date
in 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::localtime
Datenrennen führen kann. localtime_r
oder ä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 const
Objekten 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.