2

現在の時刻を取得するために、C ++プログラムでclock_gettime()を使用しています。ただし、戻り値はUTCのエポックからの秒数です。このコードは、時間が1時間ずれると、夏時間の間に私のタイムゾーンで混乱する可能性があります。

システム自体にはNTPが同期しており、ESTで常に正しい時刻が表示されます。夏時間の問題を回避できるように、clock_gettime()でUTCではなく現地時間を報告する方法はありますか?

4

4 に答える 4

2

time1970年の初めからの秒数も報告することを理解してください(でtime_t)。のtv_secメンバーを取得してまたはにtimespec渡すと、必要なものを取得できます。localtimelocaltime_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

于 2012-06-20T21:31:27.763 に答える
1

Windowsを使用している場合は、このGetTimeZoneInformationを使用できますが、WindowsAPIを含める必要があります。

これを実現する別の方法は、structtmです。詳細はここにあります:structtm。「夏時間フラグ(tm_isdst)は、夏時間が有効な場合はゼロより大きく、夏時間が有効でない場合はゼロより大きく、情報が利用できない場合はゼロ未満です。」これが簡単な方法だと思います。

于 2015-12-07T21:49:35.473 に答える
0

Boostを使用できる場合は、日時ライブラリを使用して、これらすべてを明示的に制御できます。http ://www.boost.org/doc/libs/1_49_0/doc/html/date_time.html

私はさまざまなプラットフォームとさまざまな言語で時間を処理する必要がありましたが、Boostライブラリは他のどのライブラリよりもはるかに優れていることがわかりました。

于 2012-06-20T20:24:32.990 に答える
0
#include <time.h>
time_t rawtime;
struct tm *timeinfo;

    time(&rawtime);
    timeinfo = localtime(&rawtime);
    if (timeinfo->tm_isdst)
        Hour -= 1; // daylight savings time
于 2020-07-09T18:35:12.500 に答える