如何在C++中创建Date对象?求对应Python代码的C++实现
C++中创建日期对象并实现日期运算的正确方式
C++20 标准实现
C++20 在 <chrono> 库中正式引入了日历日期类型,完全可以对应你提供的Python代码逻辑:
#include <chrono> #include <iostream> int main() { // 创建2020年5月17日的日期对象 auto x = std::chrono::year_month_day{ std::chrono::year{2020}, std::chrono::month{5}, std::chrono::day{17} }; // 定义1天的时间间隔 auto delta = std::chrono::days{1}; // 日期加1天,需先转换为sys_days(基于系统时钟的天数时间点)再运算 x = std::chrono::sys_days{x} + delta; // 输出结果验证 std::cout << x << std::endl; return 0; }
关键说明:
std::chrono::year_month_day就是对应Pythondatetime.date的日历日期类型,支持直接通过年、月、日构造。- 直接对
year_month_day做加减运算需要先转成sys_days,因为日历日期的加减要处理闰年、不同月份天数等逻辑,转换后可直接与days类型的时长相加。 - 编译时需开启C++20支持,例如GCC添加
-std=c++20参数。
C++20 之前的替代方案
如果编译器不支持C20,可使用Howard Hinnant的date库(这是C20日期库的原型实现,兼容C++11及以上版本):
#include "date/date.h" #include <iostream> int main() { using namespace date; // 创建2020年5月17日的日期对象 auto x = year_month_day{year{2020}, month{5}, day{17}}; // 定义1天的时间间隔 auto delta = days{1}; // 日期加1天 x = sys_days{x} + delta; // 输出结果 std::cout << x << std::endl; return 0; }
补充说明:
- 你之前接触的
time_point是和具体时钟绑定的时间点类型(如系统时钟、稳态时钟),而year_month_day是纯粹的日历日期,更贴合你Python代码的需求。
内容的提问来源于stack exchange,提问作者mascai
相关产品推荐
相关产品推荐

