Mit Code von this answer:
#include <chrono>
#include <ctime>
#include <iostream>
template <typename Duration>
void print_time(tm t, Duration fraction) {
using namespace std::chrono;
std::printf("[%04u-%02u-%02u %02u:%02u:%02u.%03u]\n", t.tm_year + 1900,
t.tm_mon + 1, t.tm_mday, t.tm_hour, t.tm_min, t.tm_sec,
static_cast<unsigned>(fraction/milliseconds(1)));
// VS2013's library has a bug which may require you to replace
// "fraction/milliseconds(1)" with
// "duration_cast<milliseconds>(fraction).count()"
}
int main() {
using namespace std;
using namespace std::chrono;
system_clock::time_point now = system_clock::now();
system_clock::duration tp = now.time_since_epoch();
tp -= duration_cast<seconds>(tp);
time_t tt = system_clock::to_time_t(now);
print_time(*gmtime(&tt), tp);
print_time(*localtime(&tt), tp);
}
Eine Sache im Auge zu behalten ist, dass die Tatsache, dass der Timer gibt Werte von Sub-Millisekunden Denominationen notwendigerweise bedeutet nicht, dass der Timer Sub-Millisekunden-Auflösung hat. Ich denke, Windows-Implementierung in VS2015 kann endlich behoben werden, aber der Timer, den sie bisher verwendet haben, um ihre Chrono-Implementierung zu unterstützen, war sensibel für die OS timeBeginPeriod()
Einstellung, zeigt unterschiedliche Auflösung, und die Standardeinstellung ist glaube ich 16 Millisekunden.
Auch der obige Code geht davon aus, dass weder UTC noch Ihre lokale Zeitzone von der Epoche std::chrono::system_clock
um einen Bruchteilsekundenwert versetzt sind.
Beispiel für Howard Datum Funktionen ctime zu vermeiden: http://coliru.stacked-crooked.com/a/98db840b238d3ce7
Es gibt keine Standardmethode zum Drucken von Datum mit Millisekunden. Mit 'std :: chrono' denke ich, dass Sie nur einen' time_point' selbst konvertieren können. – TNA
Sie müssen plattformspezifische Aufrufe verwenden, um Millisekundengenauigkeit zu erhalten. –
@ThomasMatthews Ich bin ziemlich sicher, dass Chrono eine Genauigkeit von bis zu einigen Mikrosekunden ziehen kann, wenn das System es erlaubt. Versuchen Sie beispielsweise, diesen Code auszuführen: http: //en.cppreference.com/w/cpp/chrono/time_point – Alexandru