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

C++17中如何从std::chrono::time_point构造date::local_time对象

从std::chrono::time_point转换为date::local_time的实现方案

核心实现代码

你已经完成了file_time_type到system_clock时间点的转换,后续只需要通过时区对象完成UTC到本地时间的转换即可,完整逻辑如下:

// 需引入Howard Hinnant时区库头文件
#include "date/tz.h"
#include <chrono>
#include <filesystem>

// ...

// 你已实现的文件时间转system_clock时间点逻辑
auto fileTimeTp = std::chrono::clock_cast<std::chrono::system_clock>(someDirectoryEntryObject.last_write_time());

// 转换为毫秒级精度的本地时间
auto locTime = date::current_zone()->to_local(
    std::chrono::time_point_cast<std::chrono::milliseconds>(fileTimeTp)
);

以上代码得到的locTime类型就是你需要的date::local_time<std::chrono::milliseconds>,可直接用于和同类型的本地时间对象做大小、相等性比对。

原理解释

  • date::local_time是仅表示本地时间刻度的类型,本身不携带时区信息,因此不存在直接从UTC体系的std::chrono::system_clock::time_point构造的接口,必须指定对应时区完成UTC时间到本地时间的映射。
  • 如果你需要使用特定时区而非操作系统当前时区,可将date::current_zone()替换为date::locate_zone("时区ID"),例如date::locate_zone("Asia/Shanghai")指定使用北京时间。
  • 该写法完全符合C++17规范,无高版本语法依赖。

内容的提问来源于stack exchange,提问作者Vinzent Meier

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 22:27:03