C++日期处理:时间操作库概览

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

C++日期处理:关键库概览



日期和时间管理是任何严肃应用程序开发中的基本任务之一。从事件日志记录到时间间隔计算和任务调度——C++为开发者提供了几种强大的工具。在本文中,我们将探讨三种主要方法:现代标准库 std::chrono、Howard Hinnant 的扩展(部分已纳入 C++20)以及久经考验的 Boost.DateTime。



1. 标准库:std::chrono(C++11 及更高版本)



从 C++11 开始,标准库中的时间处理变得更加方便。std::chrono 提供了表示时间点(time_point)、持续时间(duration)和时钟(clock)的类型。然而,直到 C++20,它才提供了处理日历日期(日、月、年)的便捷工具。



主要组件:

  • 时钟(Clocks): system_clock(系统时间)、steady_clock(用于测量的单调时间)、high_resolution_clock(通常是前两者的别名)。
  • 持续时间(Durations): std::chrono::seconds、milliseconds、microseconds 等。支持算术运算。
  • 时间点(Time points): 将持续时间绑定到特定的时钟起点(纪元)。


示例:测量执行时间

#include <iostream>#include <chrono>#include <thread>

int main() { auto start = std::chrono::high_resolution_clock::now(); std::this_thread::sleep_for(std::chrono::milliseconds(500)); auto end = std::chrono::high_resolution_clock::now(); auto duration = std::chrono::duration_cast<std::chrono::milliseconds>(end - start); std::cout << "执行时间: " << duration.count() << " 毫秒"; return 0;}


这段代码演示了精确到毫秒的时间测量。对于 C++20 中的日历日期处理,出现了新的功能,但如果您使用的是较旧的标准,以下库将对您有所帮助。



2. Howard Hinnant 的 "date" 库(C++20 的前身)



在 C++20 发布之前,Howard Hinnant 创建了 date 库,它成为了处理日历日期的事实标准。它轻量级,不需要 Boost,并且基于 std::chrono 运行。其大部分功能已纳入 C++20,但该库对于使用 C++11/14/17 的项目仍然适用。



主要功能:

  • year_month_day、year_month、weekday 类型。
  • 从字符串解析日期(parse)。
  • 日期格式化(format)。
  • 日、月、年的加减运算。
  • 时区支持(tz.h 扩展)。


示例:日期处理

#include <iostream>#include <date/date.h>#include <chrono>

int main() { using namespace date; using namespace std::chrono; // 创建日期:2025年3月15日 auto d1 = 2025_y / March / 15; std::cout << "日期: " << d1 << ""; // 加30天 auto d2 = d1 + days{30}; std::cout << "30天后: " << d2 << ""; // 天数差 auto diff = (d2 - d1).count(); std::cout << "相差: " << diff << " 天"; // 获取当前日期 auto today = floor<days>(system_clock::now()); std::cout << "今天: " << year_month_day{today} << ""; return 0;}


这个

推荐