Neue Antwort auf eine alte Frage:
Die Frage gibt nicht an, in welcher Zeitzone. Es gibt zwei vernünftige Möglichkeiten:
- In UTC.
- In der lokalen Zeitzone des Computers.
Für 1 können Sie diese Datumsbibliothek und das folgende Programm verwenden:
#include "date.h"
#include <iostream>
int
main()
{
using namespace date;
using namespace std::chrono;
std::cout << system_clock::now() << '\n';
}
Was gerade für mich ausgegeben hat:
2015-08-18 22:08:18.944211
Die Datumsbibliothek fügt im Wesentlichen nur einen Streaming-Operator für hinzu std::chrono::system_clock::time_point
. Es fügt auch viele andere nette Funktionen hinzu, die jedoch in diesem einfachen Programm nicht verwendet werden.
Wenn Sie es vorziehen 2 (die Ortszeit), gibt es eine Zeitzone - Bibliothek , die auf dem aufbaut Datum Bibliothek . Beide Bibliotheken sind Open Source und plattformübergreifend , vorausgesetzt, der Compiler unterstützt C ++ 11 oder C ++ 14.
#include "tz.h"
#include <iostream>
int
main()
{
using namespace date;
using namespace std::chrono;
auto local = make_zoned(current_zone(), system_clock::now());
std::cout << local << '\n';
}
Was für mich gerade ausgegeben:
2015-08-18 18:08:18.944211 EDT
Der Ergebnistyp von make_zoned
ist a, date::zoned_time
was eine Paarung von a date::time_zone
und a ist std::chrono::system_clock::time_point
. Dieses Paar stellt eine Ortszeit dar, kann aber auch UTC darstellen, je nachdem, wie Sie es abfragen.
Mit der obigen Ausgabe können Sie sehen, dass sich mein Computer derzeit in einer Zeitzone mit einem UTC-Offset von -4h und einer Abkürzung für EDT befindet.
Wenn eine andere Zeitzone gewünscht wird, kann dies auch erreicht werden. Um beispielsweise die aktuelle Zeit in Sydney, Australien, zu ermitteln, ändern Sie einfach die Konstruktion der Variablen local
in:
auto local = make_zoned("Australia/Sydney", system_clock::now());
Und die Ausgabe ändert sich zu:
2015-08-19 08:08:18.944211 AEST
Update für C ++ 20
Diese Bibliothek ist jetzt weitgehend für C ++ 20 übernommen. Der Namespace date
ist weg und alles ist std::chrono
jetzt im Namespace . Und zoned_time
anstelle von verwenden make_time
. Löschen Sie die Header "date.h"
und "tz.h"
und verwenden Sie einfach <chrono>
.
Während ich dies schreibe, tauchen auf einigen Plattformen gerade erst Teilimplementierungen auf.