You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Windows Server上std::zoned_time无法运行的问题求助

std::chrono::zoned_time在Windows Server 2016崩溃问题解决

核心原因

Windows Server 2016(1809版本)的系统时区数据库未支持Antarctica/Casey这类IANA时区标识符,而Windows 10 21H2已完成IANA时区与系统本地时区的映射适配。代码中直接使用未被识别的IANA时区时,zoned_time构造函数会抛出未捕获的异常,导致程序崩溃。

验证方法

在Windows Server 2016上运行带异常捕获的代码,确认错误类型:

#include <iostream>
#include <chrono>
#include <stdexcept>

using namespace std::chrono;

int main()
{
    try {
        zoned_time zt("Antarctica/Casey", sys_days{2021y/September/15d}+16h+45min);
        sys_info si = zt.get_info();
        std::cout << si;
    } catch (const std::exception& e) {
        std::cout << "异常信息: " << e.what() << std::endl;
    }
    return 0;
}

运行后会输出类似异常信息: The specified time zone cannot be found.的内容,证实是时区识别失败导致的崩溃。

解决方案

  • 替换为Windows本地时区标识符:将"Antarctica/Casey"替换为服务器支持的时区名称,比如"UTC+11",修改后代码如下:
#include <iostream>
#include <chrono>

using namespace std::chrono;

int main()
{
    zoned_time zt("UTC+11", sys_days{2021y/September/15d}+16h+45min);
    sys_info si = zt.get_info();
    std::cout << si;

    return 0;
}
  • 更新服务器时区数据:安装Windows Server 2016的最新累积更新,微软后续更新补丁中补充了IANA时区的支持。通过Windows Update手动检查并安装所有可用更新后,系统即可识别Antarctica/Casey这类时区。

  • 使用第三方时区库(可选):若无法更新系统,可集成ICU等第三方时区库,脱离对系统自带时区数据库的依赖,直接处理IANA时区。

内容的提问来源于stack exchange,提问作者jakub

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 11:45:33