おそらく、このfree, open source, C++11/14 timezone libraryが役立つ可能性があります。それを使用して、UTCをローカルタイムゾーンに変換したり、任意のIANA timezoneに変換したり、または任意の2つの間で任意のIANA timezonesに変換することができます。ライブラリはgcc、clang、およびVSに移植されています。しかし、それには<chrono>
が必要です。
現在のUTC時間を取得し、それをベルリンの現地時間に変換してから、現地時間に変換した後、ベルリン現地時間をUTCに変換する方法の短い例を示します。それは現代のC++構文と型の安全性を使用して、すべての非常に簡単です:
#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';
}
私にとってこれだけの出力:
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
はい、あなたも何でも精度あなたのstd::chrono::sytem_clock
担体とタイムゾーンを移行し、解析することができますその精度をフォーマットします。このライブラリはあなたにトラブルを与える場合
することは、あなたは、スタックオーバーフロー、またはchat here、またはopen an issue hereにここでヘルプを表示、またはメールアドレスを検索し、直接私に連絡することができます。
このライブラリは完全に文書化されており、最新のIANA timezone databaseで最新の状態に保つように設計されています(latest mess the Egyptian politicians have madeが必要な場合でも3日の予告なしにタイムゾーンのルールを変更する必要があります)。あなたのタイムスタンプが古くなった場合(1940年代から)、心配しないでください。このライブラリは、IANAが提供する完全なタイムゾーン履歴をシームレスにサポートします。つまり、IANA timezone databaseにデータがある場合、このライブラリはエラーなく抽出して使用します。
あなたのアプリケーションに役立つ場合は、ベルリンのローカルの日付リテラルを簡単かつ効率的に作成することもできます。たとえば、ここにあなたがベルリンで2016年7月の最初の月曜日に15:30に指定する方法をである(<chrono>
リテラルが必要とC++ 14):
auto meet = make_zoned("Europe/Berlin", local_days{2016_y/jul/mon[1]} + 15h + 30min);
std::cout << meet << '\n';
出力:
2016-07-04 15:30:00 CEST
したい場合
std::cout << make_zoned("America/New_York", meet) << '\n';
出力:
0見つけるためには、何時間ニューヨーク事務所は、この会議のためでは在宅勤務してい
これが役に立ちます。
[可能な重複](http://stackoverflow.com/questions/761791/converting-between-local-times-and-gmt-utc-in-c-c)。 Googleはあなたの友人です。 –
あなたが提案するトピックは異なっています。そして私は尋ねる前にグーグルで見つけました。 – user14416
(質問自体に)あなたの話題がどう違うのかを明確にしてください。 –