首页 > 其他分享 >日期差值计算

日期差值计算

时间:2023-07-20 20:44:30浏览次数:27  
标签:int 天数 31 30 time1 time2 日期 差值 计算

日期处理

日期差值的问题总会令人感到很头痛,因为总是需要处理平年瑞年带来的二月天数问题以及,大 月小月问题,然而这种日期差值问题往往有一个很直接了当的解决方式,即将小的那个日期循环不断加一,并计算每一次加一的次数,直到小的那个日期和大的那个日期相等为止。

需要注意,对天数进行加一操作时,当达到该月最大天数加一时,应当使当前月份进一,重置天数为1号,当月数达到13时,应使年份进一,月份重置为1月。

对于闰年平年以及大月小月的处理,不妨定义数组int month[13][2],其中,第二维中0表示平年,1表示闰年,闰年二月28,平年二月29。

int month[13][2] = {
    {0,0},{31,31},{28,29},{31,31},{30,30},{31,31},{30,30},{31,31},{31,31},{30,30},
    {31,31},{30,30},{31,31}
};

为了方便取出平年闰年的月份数,需定义一个判断是否是闰年的函数:

bool isLeap(int year){
    return ((year%4 == 0 && year %100 != 0 )|| year % 400 == 0);
}

对于输入格式为20010308,20010308/10000将得到年份y,200100308%10000将得到月份和天数,将该结果除以100将得到月份m,将该结果对100取余将得到天数d。

C++的简单源码示例:

#include <iostream>
#include <stdio.h>
using namespace std;
//定义月份数组,第二维中第一个元素表示平年,第二个元素表示闰年
int month[13][2] = {
    {0,0},{31,31},{28,29},{31,31},{30,30},{31,31},{30,30},{31,31},{31,31},{30,30},
    {31,31},{30,30},{31,31}
};
//判断平年,闰年
bool isLeap(int year){
    return ((year%4 == 0 && year %100 != 0 )|| year % 400 == 0);
}
int main()
{
    //输入两个日期,如20011208
    int time1,time2;
    scanf("%d %d",&time1,&time2);
    //如果第一个第日期小于第二个日期,交换他们的位置
    if(time1 > time2){
        int temp =time1;
        time1 = time2;
        time2 = temp;
    }
    //获得年份
    int y1 = time1 /10000;
    //获得月份
    int m1 = time1 % 10000/100;
    //获得天数
    int d1 = time1 % 100;
    int y2 = time2 /10000;
    int m2 = time2 % 10000/100;
    int d2 = time2 % 100;
    //间隔天数
    int result = 1;
    //当两个日期的年月日相等时,退出循环,有一个不满足则继续循环
    while (y1 < y2 || m1 < m2 || d1 < d2){
        //天数自增
        d1++;
        //当天数等于单前月份满天数+1,则月份进一,重置天数为1
        if(d1 == month[m1][isLeap(y1)] + 1) {
            m1++;
            d1 = 1;
        }
        //当月份进位到13时,年份进1,重置月份为1
        if(m1 == 13){
            y1 ++;
            m1 = 1;
        }
        //间隔天数加一
        result ++ ;
    }
    printf("%d\n",result);
    return 0;
}

标签:int,天数,31,30,time1,time2,日期,差值,计算
From: https://www.cnblogs.com/elunking/p/17569631.html

相关文章

  • Pytorch 反向计算图
    PyTorch反向计算图介绍PyTorch是一个基于Python的科学计算库,它提供了强大的功能来构建深度学习模型。其中,反向计算图是PyTorch的一个重要特性,它使得我们能够自动计算梯度并进行反向传播,从而优化我们的模型。在本文中,我们将详细介绍PyTorch的反向计算图机制,并提供一个简单的代码......
  • java时间加减计算方法
    Java时间加减计算方法在Java中,我们经常需要对时间进行加减计算,比如计算两个日期之间的天数差、计算某个日期之后的几天是哪一天等等。本文将介绍在Java中进行时间加减计算的方法,并提供相应的代码示例。1.使用java.util.Calendar类java.util.Calendar类是Java提供的处理日期和时......
  • java时间戳转为指定格式日期
    Java时间戳转为指定格式日期在Java中,时间戳是一个以毫秒为单位的整数值,代表了自1970年1月1日00:00:00UTC以来的时间。我们经常需要将时间戳转换成指定格式的日期,以便更好地展示和处理时间数据。本文将介绍如何使用Java将时间戳转换为指定格式的日期,并提供相应的代码示例。使用Ja......
  • java自定义输入日期
    Java自定义输入日期在Java编程中,处理日期是一个常见的任务。Java提供了许多内置的类和方法来处理日期和时间,但有时我们需要自定义输入日期的方式。本文将介绍如何在Java中自定义输入日期,并提供相应的代码示例。1.使用Scanner类获取用户输入要实现自定义输入日期的功能,我们可以......
  • 计算机系统基础PA1
    在开始愉快的PA之旅之前  不来玩一下吗? 不得不说,要仔细看清楚来,是根据fceux-am/README.md中的内容进行操作这里我们可以拿到一个压缩包咋解压?   解压完后,比如我想要将这个文件夹下的全部文件移动到当前文件夹下,咋办?如将a/b/下的文件全......
  • mysql 今天的日期
    实现mysql今天的日期作为一名经验丰富的开发者,我将帮助你了解如何在MySQL中获取今天的日期。本文将分为两部分,第一部分是整个过程的流程概述,第二部分是每一步所需的具体操作和代码。过程概述下面是实现"mysql今天的日期"的整个过程概述:步骤操作1连接到MySQL数据库......
  • mysql 计算环比分母为0的情况
    MySQL计算环比分母为0的情况在数据分析中,经常需要计算环比增长率,尤其是对于数据库中的数据。然而,当分母为0时,会导致计算结果出现无穷大或NaN(NotaNumber)的情况,这会影响后续的统计分析和决策。本文将介绍如何在MySQL中处理计算环比时分母为0的情况,并给出相应的代码示例。什么是环......
  • 青少年党史宣传教育平台的设计与实现-计算机毕业设计源码+LW文档
    系统预期用户如下:(1)管理员一般为学校相关人员工作人员,完成本性学生平台的相关学习情况的查看和统计,并对各类数据进行管理。(2)学生学生可以登陆注册自己的账号,查看平台发布的各类宣传文章,修改自己的账户数据,对文章进行评论,参与党史答题,查看积分排名,通过积分来置换物品等。(3)超级管......
  • postger中實現oracle中trunc日期處理功能
    問題描述需要將下面的oracle中的sql轉化成poetger的sql,由於end_time和start_time屬於date類型,相加減得出為天,乘24再乘3600得出秒數,如果是時間不為整天會得出浮點數。select(TRUNC((a.end_Time-a.start_time)*24*3600))asintervalfromtable_namea 轉化後postg......
  • 计算时间的两个方法
    importjava.time.LocalDate;importjava.time.temporal.ChronoUnit;publicclassDateSubtractionExample{publicstaticvoidmain(String[]args){//获取当前日期LocalDatecurrentDate=LocalDate.now();//计算2646天前的日期long......