如何使用C++在Linux中获取UTC偏移量

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偏移量的最佳方法是什么?


1
相关:如何使用Boost DateTime获取UTC偏移量:https://dev59.com/qFDTa4cB1Zd3GeqPNOdD - Magnus Hoff
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;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接