我正在为Windows 11和CentOS7(其最新的GCC版本是11)编写C++跨平台应用程序。
我的应用程序必须使用 Howard Hinnant 先生的
date.h
(而不是 std::chrono
)来解析时区字符串。
add_executable(myapp myapp.cpp)
set_target_properties(myapp PROPERTIES CXX_STANDARD 17)
target_link_libraries(myapp PRIVATE date::date date::date-tz)
std::string time_with_tz = "2024-09-30 14:53:27.123456 UTC";
std::stringstream ss(time_with_tz);
std::chrono::system_clock::time_point tp_with_tz;
date::from_stream(ss, "%F %T %Z", tp_with_tz); // date::parse does not work for me in both Win & Linux
date::format("%F %T %Z", date::make_zoned(date::current_zone(), tp_with_tz))
我已从
http://www.iana.org/time-zones和 windowsZones.xml 手动下载最新的
tzdb-2024b.tar.lz
到 C:\users\01258\downloads\tzdata
。
我的代码在 Linux 中运行成功,但在 Windows 中调用
date::make_zoned
时,相同的代码崩溃了。我的申请中可能缺少什么?我什至尝试使用 .\vcpkg.exe install date[remote-api]:x64-windows
安装它,但它也不起作用,在 Windows 中仍然崩溃。
不是积极的,但我强烈怀疑这是这个问题的重复。
简而言之,tzdb-2024b 在一个地方本来打算使用“Apr”,但引入了字符串“April”。 根据 IANA 规范,这是允许的,但仍然破坏了多个解析器,包括我的解析器。
已采取两件事来解决此问题: