現在の時刻を取得するために、C ++プログラムでclock_gettime()を使用しています。ただし、戻り値はUTCのエポックからの秒数です。このコードは、時間が1時間ずれると、夏時間の間に私のタイムゾーンで混乱する可能性があります。
システム自体にはNTPが同期しており、ESTで常に正しい時刻が表示されます。夏時間の問題を回避できるように、clock_gettime()でUTCではなく現地時間を報告する方法はありますか?
time
1970年の初めからの秒数も報告することを理解してください(でtime_t
)。のtv_sec
メンバーを取得してまたはにtimespec
渡すと、必要なものを取得できます。localtime
localtime_r
timespec tsv;
clock_gettime(CLOCK_REALTIME, &tsv);
time_t t = tsv.tv_sec; // just in case types aren't the same
tm tmv;
localtime_r(&t, &tmv); // populate tmv with local time info
そして、あなたはあなたが望む方法tv_nsec
でメンバーと取引することができます。timespec
Windowsを使用している場合は、このGetTimeZoneInformationを使用できますが、WindowsAPIを含める必要があります。
これを実現する別の方法は、structtmです。詳細はここにあります:structtm。「夏時間フラグ(tm_isdst)は、夏時間が有効な場合はゼロより大きく、夏時間が有効でない場合はゼロより大きく、情報が利用できない場合はゼロ未満です。」これが簡単な方法だと思います。
Boostを使用できる場合は、日時ライブラリを使用して、これらすべてを明示的に制御できます。http ://www.boost.org/doc/libs/1_49_0/doc/html/date_time.html
私はさまざまなプラットフォームとさまざまな言語で時間を処理する必要がありましたが、Boostライブラリは他のどのライブラリよりもはるかに優れていることがわかりました。
#include <time.h>
time_t rawtime;
struct tm *timeinfo;
time(&rawtime);
timeinfo = localtime(&rawtime);
if (timeinfo->tm_isdst)
Hour -= 1; // daylight savings time