编译错误之error C3861: “GetDynamicTimeZoneInformation”: 找不到标识符

我的电脑是Win10 64位电脑,用的VS2015编译,出现编译错误,error C3861: “ GetDynamicTimeZoneInformation”: 找不到标识符;

该标志符定义在timezoneapi.h中,报错的地方是os.h,这类系统头文件中用到该标志符。
我试图将 timezoneapi.h该头文件包含进工程目录,发现还是解决不了问题;
索性将os.h中的内容更改解决了问题,问题猜想是由于win10系统问题。
inline int utc_minutes_offset(const std::tm& tm = details::os::localtime())
{

#ifdef _WIN32
//#if _WIN32_WINNT < _WIN32_WINNT_WS08                             //注释掉
    TIME_ZONE_INFORMATION tzinfo;
    auto rv = GetTimeZoneInformation(&tzinfo);
//#else                                                            //注释掉
//    DYNAMIC_TIME_ZONE_INFORMATION tzinfo;                          //注释掉
//    auto rv = GetDynamicTimeZoneInformation(&tzinfo);              //注释掉
//#endif                                                             //注释掉
//    if (rv == TIME_ZONE_ID_INVALID)                                 //注释掉
//        throw spdlog::spdlog_ex("Failed getting timezone info. ", errno);      //注释掉
//                                                 
    int offset = -tzinfo.Bias;
    if (tm.tm_isdst)
        offset -= tzinfo.DaylightBias;
    else
        offset -= tzinfo.StandardBias;
    return offset;
#else

#if defined(sun) || defined(__sun)
    // 'tm_gmtoff' field is BSD extension and it's missing on SunOS/Solaris
    struct helper
    {
        static long int calculate_gmt_offset(const std::tm & localtm = details::os::localtime(), const std::tm & gmtm = details::os::gmtime())
        {
            int local_year = localtm.tm_year + (1900 - 1);
            int gmt_year = gmtm.tm_year + (1900 - 1);

            long int days = (
                                // difference in day of year
                                localtm.tm_yday - gmtm.tm_yday

                                // + intervening leap days
                                + ((local_year >> 2) - (gmt_year >> 2))
                                - (local_year / 100 - gmt_year / 100)
                                + ((local_year / 100 >> 2) - (gmt_year / 100 >> 2))

                                // + difference in years * 365 */
                                + (long int)(local_year - gmt_year) * 365
                            );

            long int hours = (24 * days) + (localtm.tm_hour - gmtm.tm_hour);
            long int mins = (60 * hours) + (localtm.tm_min - gmtm.tm_min);
            long int secs = (60 * mins) + (localtm.tm_sec - gmtm.tm_sec);

            return secs;
        }
    };

    long int offset_seconds = helper::calculate_gmt_offset(tm);
#else
    long int offset_seconds = tm.tm_gmtoff;
#endif

    return static_cast<int>(offset_seconds / 60);
#endif
}

编译提示函数需要有输出,所以只注释掉以上备注有“注释掉”部分代码,使函数有return值。由于系统是windows系统,所以就强制用了 #ifdef _WIN32
自此,编译通过。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值