我必须使用C++20的utc_clock<>
功能。以前,我使用Howard Hinnant日期库中的日期库,但现在我想使用标准的C++20功能(而不是日期库)。
GCC版本为:
gcc版本12.2.1 20221020[修订版0aef83351473e8f4eb774f8f999bbe87a4866d7](SUSE Linux)
他提供了一个测试功能的示例:
using namespace std;
using namespace std::chrono;
using namespace std::literals;
auto start = clock_cast<utc_clock>(sys_days{2015y/July/1} - 500ms);
auto end = start + 2s;
for (auto utc = start; utc < end; utc += 100ms)
{
auto sys = clock_cast<system_clock>(utc);
auto tai = clock_cast<tai_clock>(utc);
auto gps = clock_cast<gps_clock>(utc);
cout << format("%F %T SYS == ", sys)
<< format("%F %T %Z == ", utc)
<< format("%F %T %Z == ", tai)
<< format("%F %T %Zn", gps);
}
在CMakeLists.txt中有以下行:
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
但编译器的输出总是:
/home/aces/Programs/FSLockingTest/datapacket.cpp:28: error: ‘clock_cast’ was not declared in this scope; did you mean ‘clock_t’?
/home/aces/Programs/FSLockingTest/datapacket.cpp:28:20: error: ‘clock_cast’ was not declared in this scope; did you mean ‘clock_t’?
28 | auto sys = clock_cast<system_clock>(utc);
| ^~~~~~~~~~~~~~~~~~~~~~~~
| clock_t
clock_cast
是否尚未实施?如果没有,如何进行转换?(我已经试过了,但没有成功)。
我尝试了几种名称空间变体;tt编译时应该没有错误。
尚未实现。但正在进行中:https://libcxx.llvm.org/Status/Cxx20.html
请注意,您的格式字符串需要稍微更改:"%F %T %Z"
->"{:%F %T %Z}"
。