Vielleicht könnte dies free, open source, C++11/14 timezone library helfen. Sie können es verwenden, um UTC in oder von Ihrer lokalen Zeitzone in oder von einem beliebigen oder zwischen zwei beliebigen IANA timezones zu konvertieren. Die Bibliothek wurde nach gcc, clang und VS portiert. Aber es erfordert <chrono>
.
Hier ist ein kurzes Beispiel, wie Sie die aktuelle UTC-Zeit erhalten, diese in Berliner Ortszeit konvertieren, dann die Berliner Ortszeit in Ihre Ortszeit umrechnen und dann die Berliner Ortszeit in UTC umrechnen. Es ist alles ganz einfach, modern C++ Syntax und Art mit Sicherheit:
#include "tz.h"
#include <iostream>
int
main()
{
using namespace date;
using namespace std::chrono;
auto utc = system_clock::now();
auto berlin = make_zoned("Europe/Berlin", utc);
auto local = make_zoned(current_zone(), berlin);
auto utc2 = berlin.get_sys_time();
std::cout << format("%F %T %Z", utc) << '\n';
std::cout << format("%F %T %Z", berlin) << '\n';
std::cout << format("%F %T %Z", local) << '\n';
std::cout << format("%F %T %Z", utc2) << '\n';
}
Dies ist nur Ausgang für mich:
2016-07-05 01:41:29.207335 UTC
2016-07-05 03:41:29.207335 CEST
2016-07-04 21:41:29.207335 EDT
2016-07-05 01:41:29.207335 UTC
Ja, können Sie sogar überZeitZonen mit dem, was Präzision Ihrer std::chrono::sytem_clock
unterstützt und analysieren und formatiere diese Genauigkeit.
Wenn diese Bibliothek Ihnen Probleme bereitet, können Sie Hilfe hier auf Stack-Überlauf oder chat here oder open an issue here, oder suchen Sie nach meiner E-Mail-Adresse und kontaktieren Sie mich direkt.
Diese Bibliothek ist vollständig dokumentiert und entworfen, um auf dem neuesten Stand zu bleiben IANA timezone database (auch wenn Sie die latest mess the Egyptian politicians have made - Änderung einer Zeitzone Regel mit einer ganzen 3 Tage im Voraus Ankündigung benötigen). Und wenn deine Zeitstempel antiquiert sind (sagen wir aus den 1940er Jahren), mach dir keine Sorgen. Diese Bibliothek unterstützt nahtlos den vollständigen Zeitzonenverlauf, den IANA bietet. Das heißt, wenn Daten in der IANA timezone database sind, extrahiert diese Bibliothek und verwendet sie ohne Fehler.
Sie können auch einfach und effizient Datumsliterale lokal in Berlin bilden, wenn dies für Ihre Anwendung hilfreich ist. Zum Beispiel, hier ist, wie Sie 15.30 Uhr am ersten Montag im Juli 2016 in Berlin geben würden (<chrono>
Literale erfordern C++ 14):
auto meet = make_zoned("Europe/Berlin", local_days{2016_y/jul/mon[1]} + 15h + 30min);
std::cout << meet << '\n';
Ausgang:
2016-07-04 15:30:00 CEST
Wenn Sie möchten, um herauszufinden, welche Zeit hat das New Yorker Büro für dieses Treffen zu tele in:
std::cout << make_zoned("America/New_York", meet) << '\n';
Ausgang:
2016-07-04 09:30:00 EDT
Hoffe das hilft.
[Mögliches Duplikat] (http://stackoverflow.com/questions/761791/converting-between-local-times-and-gmt-utc-in-c-c). Google ist dein Freund. –
Das von Ihnen vorgeschlagene Thema ist anders. Und ich habe gegoogelt, bevor ich gefragt habe. – user14416
Könnten Sie bitte (in der Frage selbst) klären, warum ist Ihr Thema anders? –