You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 20:17:14