c++求两个日期之间的间隔天数

#include <iostream>

using namespace std;

static const unsigned char MonthTable[12] = {
    31,28,31,30,31,30,31,31,30,31,30,31
};

class Date
{
public:
    Date(int year, int month, int day);
    Date operator -(const Date& date);
    //获取时间差
    int getDateDiff(const Date &d1 , const Date &d2);
    void dispDiff(void);
public:
    int year;
    int month;
    int day;
    //时间差
    int date_difference;
};

//获取相同年份的时间差
int getSameYearDays(const Date &d1, const Date &d2);
//获取相同月份的时间差
int getSameMonthDays(const Date &d1, const Date &d2);
//获取时间差
int getYearDays(const Date &d1, const Date &d2);
//是否为润年
bool isLeapYear(int year);
//比较时间大小
bool cmpDate(const Date &d1, const Date &d2);

Date::Date(int year = 2000, int month = 1, int day = 1)
{
    this->year = year;
    this->month = month;
    this->day = day;
    date_difference = 0;
}

int Date::getDateDiff(const Date &d1, const Date &d2)
{
    if(cmpDate(d1, d2))
        return getYearDays(d1, d2);
    else
        return getYearDays(d2, d1);
}

Date Date::operator -(const Date & date)
{
    Date d;
    d.date_difference = getDateDiff(*this, date);
    return d;
}

void Date::dispDiff()
{
    cout<<"days ="<< date_difference<<endl;
}

//比较时间大小
bool cmpDate(const Date &d1, const Date &d2)
{
    int flage = false;
    if(d1.year > d2.year)
    {
        flage = true;
    }
    else if(d1.year == d2.year)
    {
        if(d1.month > d2.month)
        {
            flage = true;
        }
        else if(d1.month == d2.month)
        {
            if(d1.day >= d2.day)
            {
                flage = true;
            }
            else
            {
                flage = false;
            }
        }
        else
        {
            flage = false;
        }
    }
    else
    {
        flage = false;
    }
    return flage;
}

bool isLeapYear(int year)
{
    return (year % 4 == 0 && year %100 != 0) || year % 400 == 0 ? true : false;
}

//获取相同月份的时间差
int getSameMonthDays(const Date &d1, const Date &d2)
{
    return d1.day - d2.day;
}

//获取相同年份的时间差
int getSameYearDays(const Date &d1, const Date &d2)
{
    int days = 0;
    //相同月份
    if(d1.month == d2.month)
    {
        //获取相同月份的时间差
        days = getSameMonthDays(d1, d2);
    }
    //不同月份
    else
    {
        //获取第一月份的时间差
        days = MonthTable[d2.month-1] - d2.day;
        //二月并且是润年天数+1
        if(d2.month == 2 && isLeapYear(d2.year))
        {
            days++;
        }
        //获取中间月份的时间差
        for(int i = d2.month + 1; i < d1.month; i++)
        {
            if(i == 2 && isLeapYear(d1.year))
            {
                days += 29;
            }
            else
            {
                days += MonthTable[i -1];
            }
        }
        //获取最后一月份的时间差
        days += d1.day;
    }
    return days;
}

int getYearDays(const Date &d1, const Date &d2)
{
    int days = 0;
    //相同年份
    if(d1.year == d2.year)
    {
        //获取相同年份的时间差
        days = getSameYearDays(d1,d2);
    }
    //不同年份
    else
    {
        //获取第一年的时间差
        days = getSameYearDays(Date(d2.year,12,31), d2);
        //获取中间年份的时间差
        for(int i = d2.year + 1; i < d1.year; i++)
        {
            days += 365;
            if(isLeapYear(i))
            {
                days++;
            }
        }
        //获取最后一年的时间差
        days += getSameYearDays(d1, Date(d1.year,1,1)) + 1;
    }
    return days;
}

int main()
{
    Date d1(2000,1,1),d2(2010,1,1);
    (d1 - d2).dispDiff();
    return 0;
}

时间: 2024-11-11 12:53:49

c++求两个日期之间的间隔天数的相关文章

js 求两个日期之间相差天数

//求两个日期之间的相差天数 function daysBetween(DateOne, DateTwo) { var OneMonth = DateOne.substring(5, DateOne.lastIndexOf('/')); var OneDay = DateOne.substring(DateOne.length, DateOne.lastIndexOf('/') + 1); var OneYear = DateOne.substring(0, DateOne.indexOf('/

求两个日期之间间隔的天数,Python实现

代码如下 1 def leap_year(y): #判断是否是闰年 2 if (y % 4 == 0 and y % 100 != 0) or y % 400 == 0: 3 return True 4 else: 5 return False 6 7 def days_in_month(y, m): #判断每个月都有几天 8 if m in [1, 3, 5, 7, 8, 10, 12]: 9 return 31 10 elif m in [4, 6, 9, 11]: 11 return 30

iOS 判断两个日期之间的间隔

两个时间段,判断之间的相差,做一些时间范围限制使用 NSDateFormatter * dateFormatter = [[NSDateFormatter alloc] init]; [dateFormatter setDateFormat:@"yyyyMMddHHmmss"]; NSDate* toDate     = [dateFormatter dateFromString:@"20140702142033"]; NSDate*  startDate    =

C#获取两个日期之间的间隔

在应用程序开发的过程中,很多时候涉及到时间的操作,例如时间的大小比较以及两个时间的间隔.此文就简单介绍下C#语言如何获取两个时间之前的间隔.在C#中获取两个时间之间的间隔需要使用到TimeSpan类,该对象表示两个日期之间的差异.TimeSpan结构用于测量持续时间的最大时间单位是一天.时间间隔以天为单位进行测量,以确保一致性,因为较大单位时间(例如月和年)的天数会有所不同.TimeSpan对象的值是等于表示的时间间隔的刻度数.刻度等于100纳秒,或一千万分之一秒.获取两个时间的间隔可以使用下列

java计算两个日期之间相隔的天数

1 import java.text.ParseException; 2 import java.text.SimpleDateFormat; 3 import java.util.Calendar; 4 import java.util.Date; 5 6 7 public class date { 8 9 /** 10 * @param args 11 * @throws ParseException 12 */ 13 public static void main(String[] arg

【翻译自mos文章】计算Oracle数据库中两个日期之间的工作日天数

计算两个日期之间的工作日天数(不包括这两个日期,不包括weekend) 参考自: How to Compute Business Days for a Date Range in SQL or PLSQL (Doc ID 1014162.6) 有两个方法: 第一个是 使用sql语句: SQL> SELECT ((TO_NUMBER(TRUNC(to_date('2015-04-22','yyyy-mm-dd'), 'D') - TRUNC(to_date('2015-04-21','yyyy-m

计算两个日期之间的工作日天数

最近遇到要求两个日期之间的工作日天数的问题,遂在网上找了下js的代码,参考了下别人的代码,发现写的都有些冗余,于是自己思考,进行了一下简单处理.主要是在循环处理上进行了精简. 对剩余天数的循环,也就可以考虑是对开始日期到剩余天数之间的处理,循环开始日期到剩余天数之间有多少个周六周日(最多只有一个周六或者一个周日),由于当前开始日期在(0-6)之间,也就是当前开始日期的星期对应的数字加上剩余天数(0-6)的循环一定在(0-11)之间,所以0,7代表周日,6代表周六. <html> <hea

C语言,使用结构体读入两个在同一年的日期,判断日期是否合法,并计算两个日期之间相差的天数。结构体定义如下:

如下: typedef struct date { int year; int month; int day; }; 提示: 1. 使用如下函数完成相应功能 int isleapyear(int y); //计算是否为闰年 int islegal(Date x); //计算日期是否合法 int calcday(Date x);//计算日期是当年的第几天,用于计算两个日期之间天数的差值 2. 用于一维数组表示一年每月含有的天数 int dayofmonth[12] = {31,28,31,30,3

计算两个日期之间相差的天数(带带负数) 支持格式YYYY-mm-dd比较

/** * 计算两个日期之间相差的天数(带带负数) 支持格式YYYY-mm-dd比较 * @param higDate 减数 * @param lowDate 被减数 * @returns 差值天数 格式不正确返回null * @dada 2016-09-19 lhh添加备注 */ function DateDiff(higDate, lowDate) { //sDate1和sDate2是2006-12-18格式 var aDate, oDate1, oDate2, iDays; aDate =