如何从std::time_t创建std::filesystem::file_time_type?C++17/20方案
从std::time_t转换到std::filesystem::file_time_type的实现方案
C++20 标准方案
C++20 引入了标准的时钟转换接口,无需依赖实现细节,直接通过std::chrono::file_clock的from_sys方法完成转换:
#include <filesystem> #include <chrono> #include <ctime> int main() { std::time_t t = 1337; // 将time_t转换为系统时钟的秒级时间点 std::chrono::sys_seconds sys_sec{std::chrono::seconds{t}}; // 转换为file_time_type std::filesystem::file_time_type ft = std::chrono::file_clock::from_sys(sys_sec); return 0; }
C++17 兼容方案
C++17 没有提供标准的时钟转换方法,需依赖主流编译器(GCC、Clang、MSVC)的实现细节:std::filesystem::file_time_type的底层时钟通常与std::chrono::system_clock兼容。可以通过时间点的时长(duration)完成转换:
#include <filesystem> #include <chrono> #include <ctime> int main() { std::time_t t = 1337; // 将time_t转换为system_clock的时间点 std::chrono::system_clock::time_point sys_tp{std::chrono::seconds{t}}; // 转换为file_time_type的时长类型,再构造file_time_type std::filesystem::file_time_type ft{ std::chrono::duration_cast<std::filesystem::file_time_type::duration>( sys_tp.time_since_epoch() ) }; return 0; }
注意:该方案依赖实现兼容性,若编译器的file_time_type使用了非system_clock的底层时钟,可能无法正常工作,但目前主流环境均支持此转换。
内容的提问来源于stack exchange,提问作者PinkTurtle
相关产品推荐
相关产品推荐

