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
相关产品推荐
相关产品推荐

