std::zoned_time 在 Windows Server 上不起作用

问题描述 投票:0回答:2

我遇到了 std::chrono::zoned_time{} 的奇怪问题。甚至奇怪的是,它在我的机器上运行,而不是我正在为其构建此应用程序的远程服务器。

这个简单的代码 - 我在那里找到的 Microsoft Learn

#include <iostream>
#include <chrono>

using namespace std::chrono;

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

    return 0;
}

在开发机上写入

begin: 2020-10-03 16:01:00, end: 32767-12-31 23:59:59, offset: 39600s, save: 0min, abbrev: GMT+11

刚刚死在部署服务器上。

我真的不明白这里出了什么问题。

开发机器是Windows 10 Pro,版本21H2,内部版本19044.2130 部署服务器是 Windows Server 2016 版本 1809,内部版本 17763.3532

c++ windows c++20 c++-chrono
2个回答
0
投票

我不知道,但我怀疑您的部署服务器未附带 C++20 这部分在 Windows 平台上工作所需的 ICU 库。

从这里:

虽然我们当前的实现依赖于最新操作系统版本中 ICU DLL 的可用性,但我们计划重新审视该问题并研究为旧操作系统实施回退。


0
投票

事实上,时区相关功能仅在从 Windows10 1903 开始的 Microsoft STL 中可用。这就是

zt.get_info()
调用在部署服务器上失败的原因。同样适用于 Windows10 LTSC 2019 - 两者均基于 Windows10 1809。

另请参阅:https://github.com/microsoft/STL/issues/3853,其中指出了 microsoft-blog-post 中有关“C++20 对 Visual Studio 2019 中 Chrono 的扩展”的一些通知。

处理此问题的最广泛的问题是 https://github.com/microsoft/STL/issues/1911 自 2021 年 5 月起开放。还有一些关于需要复制哪些 DLL 才能使功能正常工作的注释。缺点是它们不会被 WindowsUpdate 覆盖。

© www.soinside.com 2019 - 2024. All rights reserved.