C++20起应优先用std::chrono::year_month_day与sys_days计算日期差,避免tm手动解析;C++17及更早需用Howard Hinnant的date库;勿混用时区与日历运算,须分层设计。
用 std::chrono 算两个日期差,别碰 tm 手动解析
标准库从 C++20 开始原生支持日历运算,std::chrono::year_month_day + std::chrono::days 是最直接、最不易出错的方式。手动拆解年月日进 mktime 再减 difftime,不仅跨平台行为不一致(比如时区、夏令时),还容易因 tm 字段未清零导致结果偏差。
实操建议:
立即学习“C++免费学习笔记(深入)”;