3

本当に奇妙な動作をしているタイムスタンプ クラスを修正しようとしています。それがしなければならないことは、構築時に現在の時刻を取得するか、文字列として渡された時刻を取得することです。

これらの日付は実際にはどこにも表示されませんが、あるタイムスタンプと別のタイムスタンプの違いがあるため、UTC で作業したいだけです。

いずれにせよ、strptime(timestamp, m_format.c_str(), &time);文字列から tm 時間を取得するために を呼び出します。この文字列は UTC 時間であるため、time_t として時間を取得するために呼び出したい場合は、現在のタイムゾーンで変更する必要があるため、 を呼び出して取得する場所でmktimeこれを行います。問題は、この関数がデフォルト値である 28800 を返すように見えることですが、コードの後半で呼び出すと、正しい値である -7200 が返されます。time.tm_hour-=tz/3600tz_get_timezone

この値を初期化するために何かする必要がありますか? 私たちには大きなコードベースがあり、その間に起こったことをすべて知っているわけではありません.

さらに、誰かが同様のクラスへのリンクを持っている場合は、間違いに気付くので、本当に感謝しています。

ありがとうございました。

4

2 に答える 2

0

私は自分の関数 time_offset を次のように定義します

#include <time.h>
double time_offset()
{
    time_t now = time(NULL);

    struct tm *gm = gmtime(&now);
    time_t gmt = mktime(gm);

    struct tm *loc = localtime(&now);
    time_t local = mktime(loc);

    return difftime(local, gmt);
}

これはhereから取得され ました

于 2013-05-30T16:23:34.243 に答える