C++实现两个日期间差多少天的解决方法

下面是“C++实现两个日期间差多少天的解决方法”的完整攻略。

一、问题描述

假设有两个日期,分别为 start_dateend_date,请实现一个函数,计算两个日期间相隔的天数。

二、解决思路

我们可以将日期转化为距离某个固定日期的天数,然后求两个日期距离固定日期的天数之差。这里我们取 1900年1月1日 作为固定日期。

将日期转化为天数的方法:假设输入日期为 y1-m1-d1,那么这个日期距离 1900年1月1日 的天数可表示为 day1 = (y1-1900)*365 + leap_years(y1) + month_days[m1-1] + d1 - 1。其中,leap_years(y) 用于计算从1900年到y年之间有多少个闰年, month_days 则表示每个月的天数,需要根据闰年和平年进行调整。

三、示例代码

#include <iostream>
using namespace std;

int month_days[12] = {31,28,31,30,31,30,31,31,30,31,30,31}; // 每个月的天数
int leap_month_days[12] = {31,29,31,30,31,30,31,31,30,31,30,31}; // 闰年每个月的天数

// 计算从1900年到y之间的闰年数
int leap_years(int y) {
    return (y - 1900) / 4 - (y - 1900) / 100 + (y - 1600) / 400;
}

// 判断是否是闰年
bool is_leap_year(int y) {
    return (y % 4 == 0 && y % 100 != 0) || (y % 400 == 0);
}

// 计算日期距离1900年1月1日的天数
int days(int y, int m, int d) {
    int total_days = (y - 1900) * 365; // 距离1900年1月1日的总天数
    total_days += leap_years(y); // 加上闰年数
    for (int i = 0; i < m - 1; i++) {
        if (is_leap_year(y)) {
            total_days += leap_month_days[i]; // 闰年月份天数累加
        } else {
            total_days += month_days[i]; // 平年月份天数累加
        }
    }
    total_days += d - 1; // 加上当前月份天数
    return total_days;
}

// 计算两个日期的差值
int date_diff(int y1, int m1, int d1, int y2, int m2, int d2) {
    int days1 = days(y1, m1, d1);
    int days2 = days(y2, m2, d2);
    return days2 - days1;
}

int main() {
    int start_year, start_month, start_day, end_year, end_month, end_day;
    cout << "请输入开始日期(年 月 日,以空格分隔):" << endl;
    cin >> start_year >> start_month >> start_day;
    cout << "请输入结束日期(年 月 日,以空格分隔):" << endl;
    cin >> end_year >> end_month >> end_day;
    int diff = date_diff(start_year, start_month, start_day, end_year, end_month, end_day);
    cout << "相差天数为:" << diff << " 天" << endl;
    return 0;
}

示例输入1:

请输入开始日期(年 月 日,以空格分隔):
2021 7 1
请输入结束日期(年 月 日,以空格分隔):
2021 7 10

示例输出1:

相差天数为:9 天

示例输入2:

请输入开始日期(年 月 日,以空格分隔):
2021 12 31
请输入结束日期(年 月 日,以空格分隔):
2022 1 1

示例输出2:

相差天数为:1 天

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C++实现两个日期间差多少天的解决方法 - Python技术站

(0)
上一篇 2023年5月23日
下一篇 2023年5月23日

相关文章

  • 基于c++ ege图形库实现五子棋游戏

    基于C++ ege图形库实现五子棋游戏攻略 五子棋游戏是一种非常经典的桌面游戏,为了帮助大家更好地了解如何使用C++ ege图形库实现五子棋游戏,本文将提供一份详细的攻略。 前置知识 在阅读本攻略之前,你应该已经有了一些C++的基础知识。同时,你需要了解ege图形库的基本用法,包括绘制图形、鼠标事件等。 实现步骤 1. 绘制棋盘 在绘制棋盘之前,我们需要先确…

    C 2023年5月22日
    00
  • C++如何调用opencv完成运动目标捕捉详解

    C++如何调用OpenCV完成运动目标捕捉,以下是详细攻略。 准备工作 在使用OpenCV前,需要安装OpenCV库。可以从OpenCV的官方网站(https://opencv.org/)下载,安装后需要在编译时链接到相关的库文件。 加载视频文件 首先需要加载视频文件,使用OpenCV中的cv::VideoCapture类。该类的构造函数接受视频文件路径作为…

    C 2023年5月23日
    00
  • docker如何对已经启动的容器添加目录映射(挂载目录)

    对已经启动的容器添加目录映射(挂载目录)是一项常见的操作。Docker 提供了docker container update命令来实现这个功能。以下是具体的步骤: 查看容器ID 使用docker ps命令可以查看已经启动的容器列表,找到需要挂载目录的容器并记住其容器ID。例如,我们找到容器名为web的ID为52a5af67b207。 $ docker ps …

    C 2023年5月23日
    00
  • C++如何过滤出字符串的中文(GBK、UTF-8)

    下面是完整的攻略: 1. 判断字符串编码格式 在过滤字符串中的中文之前,我们需要先判断字符串的编码格式。因为GBK和UTF-8编码下的中文字符的字节长度是不同的。 1.1 GBK编码格式 在GBK编码下,每个中文字符由2个字节组成。所以我们可以通过判断每个字符的字节长度是否为2来判断字符串的编码格式是GBK。 bool isGBK(const char* s…

    C 2023年5月23日
    00
  • ipython jupyter notebook中显示图像和数学公式实例

    下面是ipython jupyter notebook显示图像和数学公式的完整攻略: 显示图像 在ipython jupyter notebook中,我们可以使用matplotlib库来进行图像的显示。 步骤1:安装matplotlib库 在命令行终端中运行以下命令安装matplotlib库: pip install matplotlib 步骤2:导入mat…

    C 2023年5月22日
    00
  • c#几种数据库的大数据批量插入(SqlServer、Oracle、SQLite和MySql)

    C#几种数据库的大数据批量插入 在C#开发中,我们经常需要将大量数据批量插入到数据库中。本攻略将讲解如何在C#中实现SqlServer、Oracle、SQLite和MySql几种数据库的大数据批量插入。 SqlServer 使用SqlBulkCopy可以实现大数据批量插入到SqlServer中。具体步骤如下: 创建SqlBulkCopy对象并设置目标表名和连…

    C 2023年5月22日
    00
  • 从Immutable.js到Redux函数式编程

    从Immutable.js到Redux函数式编程的完整攻略包含以下步骤: 1. 简介 Immutable.js是一个JS库,提供了一组不可变数据结构集合(如List、Map、Set等),可以帮助我们更简洁、高效地处理数据,同时避免出错。而Redux是一个用于JavaScript应用程序的可预测状态容器,可以确保你的应用的行为始终一致且易于测试。借助Immut…

    C 2023年5月22日
    00
  • C++如何切割String对象的方法

    C++有多种方法可以切割String对象,下面介绍其中两种。 方法一:使用stringstream stringstream是一个可用于输入和输出的字符串流类。可以通过向其写入字符串,再从中读取字符串,实现将字符串按照指定分隔符进行切割的功能。 示例代码如下: #include <iostream> #include <string>…

    C 2023年5月22日
    00
合作推广
合作推广
分享本页
返回顶部