gpt4 book ai didi

c++ - 如何转换std::filesystem::file_time_type to time_t?

转载 作者:行者123 更新时间:2023-12-02 10:56:41 27 4
gpt4 key购买 nike

我使用MSVC2015为Windows编写了一个解决方案,其中以下代码将std::filesystem::last_write_time结果time_t转换为:

time_t ftime = std::file_time_type::clock::to_time_t(fs::last_write_time("/Path/filename"))

它运作良好。然后,当我尝试使用gcc 9.3(-std = C++ 2a)将解决方案移植到Linux时,出现以下错误:

Error: 'to_time_t' is not member of 'std::chrono::time_point::clock' {aka 'std::filesystem::__file_clock'}



我搜索了一个解决方案,但是发现的结果基于 cplusplus.com上std::filesystem::last_write_time的示例中包含的解决方案。解决方案如下所示:
auto ftime = fs::last_write_time(p);
std::time_t cftime = decltype(ftime)::clock::to_time_t(ftime);

不幸的是,这对我不起作用。实际上,该示例有一个注释,说它不适用于MSVC(在MSVC2015上工作)或GCC 9; C++ 20将允许便携式输出。

现在,我被卡住了。如何使用gcc进行此转换?

最佳答案

如前所述,在C++ 17中没有完美的方法可以做到这一点。根据实际用例,使用便携式近似值可能已经足够了。根据我对"How to convert std::filesystem::file_time_type to a string using GCC 9"的回答,我想建议在此使用的辅助函数:

template <typename TP>
std::time_t to_time_t(TP tp)
{
using namespace std::chrono;
auto sctp = time_point_cast<system_clock::duration>(tp - TP::clock::now()
+ system_clock::now());
return system_clock::to_time_t(sctp);
}

请注意,它在每个时钟上都使用对 now()的调用,因此它不是一个精确的,双向保证的解决方案,但是它可能对您有用,直到关闭库中的空白为止。基于这样一个事实,即同一时钟的时间点之间的差异很容易,并且不同来源的 operator+duration有一个 time_point

为了进一步降低相关错误的风险,我想指出 the conversion between C++11 clocks,其中使用
减少可能的错误的想法,但是当可以接受时,我只是使用上面的代码。

关于c++ - 如何转换std::filesystem::file_time_type to time_t?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61512032/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com