如何使用c++在linux中获取utc偏移量

how to get utc offset in linux using c++

本文关键字:获取 utc 偏移量 linux 何使用 c++      更新时间:2023-10-16

我使用以下代码段来计算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偏移的最佳方法是什么?

我认为tm_gmtoff字段应该在您的系统中可用。

std::time_t current_time;
std::time(&current_time);
struct std::tm *timeinfo = std::localtime(&current_time);
long offset = timeinfo->tm_gmtoff;