4

次のコード セグメントを使用して utc オフセットを計算していましたが、間違った結果が返されることがあります。

double DateTime::getUTCOffset()
{
    time_t currtime;

    struct tm * timeinfo;



    time ( &currtime );

    timeinfo = gmtime ( &currtime );

    time_t utc = mktime( timeinfo );

    timeinfo = localtime ( &currtime );

    time_t local = mktime( timeinfo );



    // Get offset in hours from UTC

    double offsetFromUTC = ((difftime(local, utc) / HOUR_IN_SECONDS) );

    // Adjust for DST

    if (timeinfo->tm_isdst)
    {
        offsetFromUTC += 1;
    }
    return offsetFromUTC;
}

90% の確率で正しいですが、utc オフセットを計算する最良の方法は何ですか?

4

1 に答える 1

7

tm_gmtoffあなたのシステムでフィールドが利用できるはずだと思います。

std::time_t current_time;
std::time(&current_time);
struct std::tm *timeinfo = std::localtime(&current_time);
long offset = timeinfo->tm_gmtoff;
于 2012-07-13T12:21:37.597 に答える