日期计算_隔多少天后的日期_两个日期的天数

  1 //Date.cpp
  2 #include<iostream>
  3 #include<time.h>
  4 #include<cmath>
  5 #include<cstring>
  6 using namespace std;
  7 //Date_class
  8 class Date
  9 {
 10 private:
 11     int year, month, day;
 12     int week;            //存放星期
 13     void IncDay();       //日期增加一天函数
 14     int distance();        //设成私有成员,由公有函数调用,距基准日期的天数,设基准日期为1900-1-1---B
 15     int Week() {         //计算星期
 16         return week;
 17     }
 18 public:
 19     Date(int y = 1900,int m = 1,int d = 1);   //构造函数(default)
 20     void SetSystemDate();         //取得系统日期
 21     void SetDate(int yy,int mm,int dd);       //日期设置
 22
 23     bool IsLeapYear();                        //是否闰年
 24
 25     void print_ymd() const;                   //年月日输出法
 26     void print_mdy() const;                    //月日年输出法
 27
 28     void AddDay(int days);                    //A:增加任意天数
 29     bool IsEndofMonth() ;                     //判断是否到了月末--A
 30     int Daysof2Date(Date ymd) ;               //B:2个日期之间的天数---区别查表法
 31
 32     void ShowWeek(ostream &out);              //显示星期
 33     int operator - (Date ymd);                //重载 —运算符
 34     friend ostream& operator << (ostream &out, Date& ymd);   //输出日期
 35 };
 36
 37 Date::Date(int y,int m,int d){
 38     SetDate(y,m,d);
 39 }
 40
 41 void Date::SetSystemDate()         //取得系统日期
 42 {
 43     tm *gm;                     //tm 是时间(含年月日分秒的结构体)
 44     time_t t = time(NULL);      //time_t 是长整型,,,t是总秒数;
 45     gm = gmtime(&t);            //函数返回给定的统一世界时间(通常是格林威治时间),如果系统不支持统一世界时间系统返回NULL
 46     year = 1900 + gm->tm_year;     //现在的年月日分秒
 47     month = gm->tm_mon + 1;
 48     day = gm->tm_mday;
 49 }
 50
 51 void Date::SetDate(int yy,int mm,int dd) {    //附带合法性检查,错误返回系统当前日期
 52     //进行日期合法性检查
 53     if (yy >= 1900 && yy <= 9999)
 54         year = yy;
 55     else {
 56         cout << "年设置错误:1900~9999之间!(默认设置成系统当前日期)" << endl;
 57         SetSystemDate();
 58         return ;
 59     }
 60     if (mm >= 1 && mm <= 12)
 61         month = mm;
 62     else {
 63         cout << "月设置错误:1900~9999之间!(默认设置成系统当前日期)" << endl;
 64         SetSystemDate();
 65         return;
 66     }
 67
 68     switch(month)
 69     {
 70         //小月天数
 71         case 4:
 72         case 6:
 73         case 9:
 74         case 11:
 75         if (dd >= 1 && dd <= 30)
 76             day = dd;
 77         else {
 78                 cout << "日设置错误:1900~9999之间!(默认设置成系统当前日期)" << endl;
 79                 SetSystemDate();
 80                 return ;
 81             }
 82         case 2:  //2月
 83             if ( (IsLeapYear() && dd >= 1 && dd <= 29) || (!IsLeapYear() && dd >= 1 && dd <= 28) )
 84                 day = dd;
 85             else {
 86                 cout << "日设置错误:1900~9999之间!(默认设置成系统当前日期)" << endl;
 87                 SetSystemDate();
 88                 return ;
 89             }
 90         default : //大月
 91             if (dd >= 1 && dd <= 31)
 92                 day = dd;
 93             else {
 94                 cout << "年设置错误:1900~9999之间!(默认设置成系统当前日期)" << endl;
 95                 SetSystemDate();
 96                 return ;
 97             }
 98     }
 99 }
100
101 bool Date::IsLeapYear()
102 {
103     return (year%4 == 0 && year%100 != 0) || (year%400 == 0);
104 }
105
106 void Date::print_ymd() const   //年月日输出法
107 {
108     cout << year << "-" << month << "-" << day;
109 }
110
111 void Date::print_mdy() const
112 {
113     const char *MonthName[12] = {"Jau","Feb","Mar","Apri","May","June","July","Aug","Sept",
114                                 "Oct","Nov","Dec"};
115     cout << MonthName[month-1] << " " << day << "," << year ;
116 }
117
118 void Date::IncDay()             //增加一天
119 {
120     if(IsEndofMonth())         //增加天数,记得要判断是否是年末,月末
121     {
122         if(month == 12)
123         {
124             day = 1; month = 1; year++;
125         }
126         else               //已经是IsEndMonth
127             day = 1; month++;
128     }
129     else
130         day++;
131 }
132
133 bool Date::IsEndofMonth()
134 {
135     switch(month)
136     {
137         case 4:
138         case 6:
139         case 9:
140         case 11: return day == 30;
141         case 2:
142             if (IsLeapYear())
143                 return day == 29;
144             else
145                 return day == 28;
146         default:
147             return day == 31;
148     }
149 }
150 void Date::AddDay(int days)
151 {
152     for (int i = 0; i <= days; i++)    //增加多少天--day1->day2 = day+1
153     {
154         IncDay();
155     }
156 }
157
158 /*int years = year - 1;    //相隔多少年,,用其算的才是前几年应该有的天数
159     totalDays = years*365 + years/4 - years/100 + years/400 //因为DAY...是按闰年算的年份包含闰年的已经算好
160         + DAYS_BEFORE_MONTH[month-1] + day;
161     if (IsLeapYear() && month > 2) totalDays++;
162 //(闰年)当大于2月时,天数要加1;(注:该法查表代码简洁,但是需要记住表)*/
163
164 int Date::distance()       //距离基准日期的天数, 先算到指定年的天数+一月到指定月份天数+指定天数
165 {
166     int days;
167     int years = year-1900;
168     days = years*365 + years/4 - years/100 + years/400;      //不计闰年的天数
169 //    if(years)                  //
170 //        days += (years-1)/4;   //逢闰年+1天
171     switch(month)              //此处方法不错,从12月份算起,输入多少月份就能加到哪个月
172     {                           //注意,无break;
173         case 12: days = days + 30;
174         case 11: days = days + 31;
175         case 10: days = days + 30;
176         case 9: days = days + 31;
177         case 8: days = days + 31;
178         case 7: days = days + 30;
179         case 6: days = days + 31;
180         case 5: days = days + 30;
181         case 4: days = days + 31;
182         case 3:
183             if (IsLeapYear())
184                 days = days + 29;
185             else
186                 days = days + 28;
187         case 2: days = days + 31;
188         default : break;
189     }
190     days = days + day;         //多少天只要加多少天就可以了,(年月已经知道过了多少天)
191     return days;
192 }
193
194 int Date::Daysof2Date(Date ymd) //两个日期的天数
195 {
196     int days;
197     days = abs(distance()-ymd.distance()); //distance()返回值是指定日期到基准类的天数(本类日期-指定日期)
198     return days;               //2个日期之间的天数
199 }
200
201 void Date::ShowWeek(ostream &out)  //显示该日期是星期几
202 {
203     week = distance() % 7;
204     const char w[7][3] = {"天", "一", "二", "三", "四", "五", "六"};
205     out << year << "-" << month << "-" << day << "--星期" << w[week] << endl;
206 }
207
208 int Date::operator - (Date ymd)
209 {
210     return Daysof2Date(ymd);
211 }
212
213 ostream& operator << (ostream& out, Date& ymd)
214 {
215     ymd.ShowWeek(out);
216     return out;
217 }
218
219 int main(void)
220 {
221     Date date1, date2;
222     int year, month, day;
223     cout << "please input year, month, day: " << endl;
224     cin >> year >> month >> day;
225 //    date1.SetDate(2013,1,27);
226 //    cout << "the current date is : " << endl;
227 //    date1.print_ymd();
228 //    date1.print_mdy();
229 //    date1.AddDay(100);
230 //    cout << "After 100 days , the date is :";
231 //    date1.print_ymd();
232     date1.SetDate(year, month, day);
233     cout << date1;
234
235     cout << "please input the date(year,month,day) in the future : " << endl;
236     cin >> year >> month >> day;
237     date2.SetDate(year,month,day);
238     date2.print_mdy();
239     cout << " 距离 :";
240     date1.print_mdy();
241     cout << " have "<< date1-date2 << " days" << endl;
242
243     cout << "输入(想要经历的)天数(将显示当前日期后(N天)的日期: " << endl;
244     cin >> day;
245     date1.print_ymd();
246     date1.AddDay(day);
247     cout << ", After " << day << " days, the date is : " << date1;
248
249     return 0;
250 }
时间: 2024-08-08 09:37:18

日期计算_隔多少天后的日期_两个日期的天数的相关文章

一行代码比较用户A和用户B的年龄大小(两个日期计算)

两个日期计算 用法: <edate [id=书包名] [list]> <we start="开始日期" end="结束日期" [format="yyyy-MM-dd HH:mm:ss.SSS"]/> </edate> ·        id:书包名,EDate标签返回的书包名称,可选,为空时书包名为标签名edate ·        list:列表,可选,要不要列出从开始到结束的所有日期 ·        st

对指定日期计算出N天后的日期问题

指定日期计算出N天后的日期问题 问题描述:先输入起始日期,再输入任意天数n,求n天后的日期. 源代码一(参考http://zhidao.baidu.com/linkurl=0BxF0QvTywzuRkLUFj6ulUQKYqp97CjUOZBV1UUmXoCkS9HNyOT2axHkcOsRLi-xlB_JE6KvdglSD23S35EUXK) #include<stdio.h> <span style="font-family:SimHei;font-size:14px;&q

iOS学习笔记37-时间和日期计算

一.时间和日期计算 我们在应用开发中,时常需要和时间打交道,比如获取当前时间,获取两个时间点相隔的时间等等,在iOS开发中与时间相关的类有如下几个: 1. NSDate:表示一个绝对的时间点 2. NSTimeZone:时区信息 3. NSLocale:本地化信息 4. NSDateComponents:一个封装了具体年月日.时秒分.周.季度等的类 5. NSCalendar:日历类,它提供了大部分的日期计算接口 6. NSDateFormatter:用来在日期和字符串之间转换 二.NSDate

JS下计算当前日期(当天)后N天出现NAN或者undefined的情况

前言: 帮客户做一个订单系统,需要一个日期1,一个日期2,默认情况下日期1为当天,日期2为明天,只是当时有些疑惑的是日期2偶尔会出现NAN的情况,今天在segmentfault.com看到了同样的问题,于是我觉得有必要再重温一下当时的问题.好好做一下到底是为什么? <!--date() NAN start--> 以下代码有问题,不建议直接使用,只是临时版本,后续再修改 <!DOCTYPE html> <html lang="en"> <head

国内cn域名过期失效日期计算方式

国内的cn域名在过期60天后将会被***, 可以提供重新注册. 但是这60天是怎么计算的呢? 如果你计算错了也许期盼已久的域名就会被别人注册走. 我就有这么悲催经历, 先前是看到有的网站说是过期45天就***了,让我守了2个晚上也没有注册到. 结果在60天到期***的时候被别人注册走了. 请记住 60天的过期时间是 包括域名过期当天计算一天. 第60天计算一天. 也就是在第60天的时候 就可以注册了. 不用等到第61天.................... 国内cn域名过期失效日期计算方式,布

1502131514-蓝桥杯-算法提高 日期计算

算法提高 日期计算 时间限制:1.0s   内存限制:256.0MB 问题描述 已知2011年11月11日是星期五,问YYYY年MM月DD日是星期几?注意考虑闰年的情况.尤其是逢百年不闰,逢400年闰的情况. 输入格式 输入只有一行 YYYY MM DD 输出格式 输出只有一行 W 数据规模和约定 1599 <= YYYY <= 2999 1 <= MM <= 12 1 <= DD <= 31,且确保测试样例中YYYY年MM月DD日是一个合理日期 1 <= W &

输入年份,月份,日期计算该日期是一年中的第几天//雪碧和可乐temp

输入一个整数day代表星期几,根据day的值输出对应的星期几,比如day==1,就输出"星期一"(用两种方式实现) int day; printf("请输入1~7的数字"); scanf("%d",&day); if(day>0&&day<8) { //多重if...else if条件分支实现 if(day==1){ printf("星期一"); }else if(day==2){ prin

javaScript 计算两个日期的天数相差

一:计算两个日期相差的天数 1 <html> 2 <head> 3 <meta http-equiv="Content-Type" content="text/html; charset=gb2312"> 4 <title></title> 5 </head> 6 7 <body> 8 <button onClick="btnCount_Click()"&g

CalendarHelper日期计算工具,各种日期的获取和计算

今天分享一个日期获取和计算的工具类,这个最初是用在项目中获取每周每月日期用的. package com.ran.interview; import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import java.util.Locale; /** * @auth