关于C++ chrono zoned_time的get_sys_time与get_local_time的困惑
关于std::chrono::zoned_time的get_sys_time与get_local_time的澄清
核心误解纠正
你错误认为get_local_time返回的是"本地纪元以来的时长",但C++标准库中不存在所谓"本地纪元",std::chrono::system_clock的所有时间点基准都是UTC纪元(1970-01-01 00:00:00 UTC)。
两个方法的本质解析
get_sys_time():直接返回当前时间对应的UTC纪元时长(即标准Unix时间戳,纳秒级)。你的输出1708911328957330000ns转换为秒是1708911328,对应UTC时间2024-02-26 01:35:28。PST时区为UTC-8,减去8小时后正好是你测试时的本地时间2024-02-25 17:35:28,符合预期。get_local_time():返回的是本地日历时刻对应的UTC纪元时长——也就是把你看到的本地时间(2024-02-25 17:35:28)直接当作UTC时间来计算的时间戳。你的输出1708882528957347000ns转换为秒是1708882528,对应UTC时间2024-02-25 17:35:28,这正是你本地的时刻,但这个数值是该时刻作为UTC时间点的纪元时长,而非本地时区专属的计时基准。
总结
- 所有
system_clock相关的时间点,底层都是以UTC纪元为基准,不存在本地时区独立的纪元。 get_sys_time是当前时间对应的标准UTC时间戳,和日常认知的Unix时间一致。get_local_time是本地时间的日历值映射到UTC时区后的时间戳,用来表示"本地时刻"这个日历概念对应的时间点数值。
内容的提问来源于stack exchange,提问作者Hongzheng Wang
相关产品推荐
相关产品推荐

