C++日期计算

C++日期计算,第1张

#include <iostreamh> //包含C++输入输出头文件

class date //声明DATE类

{

int year;//声明类成员year

int month;//声明类成员month

int day;//声明类成员day

public://以下为公有属性

date(int y,int m,int d) //构造函数,传入参数y,m,d

{

year=y;month=m;day=d; //分别赋值给类成员year,month,day

}

void disp()//显示年月日函数

{

cout << year << "" << month << "" << day << endl;//分别显示年月日,格式为年月日

}

friend int count_day(date &d,int); //声明友元函数 count_day 天数双向计算函数,方向由传入的int是否为0决定

friend int leap(int year);//声明友元函数leap 判断传入的year是否是闰年

friend int subs(date d1,date d2);//声明友元函数subs 计算两个传入的date对象d1和d2相差多少天

};

int count_day(date &d,int flag) //count_day实现

{

static int day_tab[2][12]={{31,28,31,30,31,30,31,31,30,31,30,31},{31,29,31,30,31,30,31,31,30,31,30,31}}; //每月天数数组,下标0为非闰年各月天数,下标1为闰年

int p,i,s;//声明变量p,i,s

if(leap(dyear))//如果传入对象d的year成员为闰年

p=1; //则取数组下标为1

else

p=0;//否则取0

if(flag)//如果传入的flag变量非0

{

s=dday;//s等于当月的天数

for(i=1;i<dmonth;i++) //循环,加上之前每月的天数

s+=day_tab[p][i-1];

}

else //否则,当flag=0

{

s=day_tab[p][dmonth]-dday; //s=该月天数减去d的日数(也就是日期d离本月结束还有多少天)

for (i=dmonth+1;i<=12;i++) //循环,加上该月之后每月的天数

s+=day_tab[p][i-1];

}

return(s);//返回s

}

int leap(int year)//闰年判断函数,是闰年返回1,否则返回0

{

if(year%4==0 && year%100!=0 || year%400==0)

return 1;

else

return 0;

}

int subs(date d1,date d2) //计算d1和d2相距多少天

{

int days,day1,day2,y;

if(d1year<d2year) //如果d2年份大于d1

{

days=count_day(d1,0); 计算d1距年底还有多少天

for(y=d1year+1;y<d2year;y++) 计算d1年份的之后一年到d2的年份的之前一年中间相隔多少天

if(leap(y)) //是闰年就加366天

days+=366L;

else

days+=365L;//否则加365天

days+=count_day(d2,1); //计算d2所在年到d2所在日有多少天

}

else if (d1year==d2year) //如果年份相等

{

day1=count_day(d1,1);//计算d1距年初有多少天

day2=count_day(d2,1);//计算d2距年初有多少天

days=day2-day1;//相减即为相隔天数

}

else//否则,即如果d1年份大于d2,反向计算,过程基本同第一个if

{

days=count_day(d2,0);

for(y=d2year+1;y<d1year;y++)

if(leap(y))

days+=366L;

else

days+=365L;

days+=count_day(d1,1);

}

return days;

}

void main()//主函数

{

date d1(2000,1,1),d2(2005,10,1); //构造d1为2000年1月1日,d2为2005年10月1日

int ds1=subs(d1,d2),ds2=subs(d2,d1); //ds1为d1与d2相距多少天,ds2为d2与d1相距多少天,实际由于subs函数内部自动判断d1 d2哪个大,所以输出应该是一样的

cout << "日期d1:";d1disp(); //显示日期d1

cout << "日期d2:";d2disp();//显示日期d2

cout << "d1和d2相距" << ds1 << "天" << endl;//输出ds1

cout << "d2和d1相距" << ds2 << "天" << endl;//输出ds2

}

//不考虑闰年 (之前有误,以此为准)

#include <iostream>

using namespace std;

void main()

{

int mon[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};

int y1,y2,m1,m2,d1,d2,temp;

int sum1=0;

int sum2=0;

int sum=0;

int i;

int j;

cout<<"请依次按年月日输入第一个日期:"<<endl;

cin>>y1>>m1>>d1;

cout<<"请依次按年月日输入第二个日期:"<<endl;

cin>>y2>>m2>>d2;

if(y1>y2)//让第二个日期为大的日期

{

temp=y1;y1=y2;y2=temp;

temp=m1;m1=m2;m2=temp;

temp=d1;d1=d2;d2=temp;

}

else

if(y1==y2)

{

if(m1>m2)

{

temp=y1;y1=y2;y2=temp;

temp=m1;m1=m2;m2=temp;

temp=d1;d1=d2;d2=temp;

}

else

if(d1>d2)

{

temp=y1;y1=y2;y2=temp;

temp=m1;m1=m2;m2=temp;

temp=d1;d1=d2;d2=temp;

}

}

for(i=1;i<=m1;i++)

{

sum1+=mon[i];

}

sum1=sum1-(mon[m1]-d1);

for(i=1;i<=m2;i++)

{

sum2+=mon[i];

}

sum2=sum2-(mon[m2]-d2);

j=y2-y1;

while(j)

{

sum+=365;j--;

}

sum=sum+sum2-sum1;

cout<<"两个日期相隔天数为:"<<sum<<endl;

}

1结构体定义最后有个分号容易丢

struct date

{}; //注意最后要有个分号

2printf("tomorrow is:%2i%2i%2i",dateupdateyear,dateupdatemonth,dateupdateday); //里面应该是nextdayyear,netxtdaymonth,nextdayday

3还有个问题,在numberofDays函数中,判断闰年的时候if(dyear%4==0&&dyear%100!=0||dyear%400==0&&dmonth==2),应该是if((dyear%4==0&&dyear%100!=0||dyear%400==0)&&dmonth==2),不然非二月也会判断为29天

4建议:再加一个判断输入错误,如输入2008 4 32,提示超出范围

#include "stdioh"

/判断闰年是 1不是 0/

int run(int a)

{ if ((a%4==0&&a%100!=0)||a%400==0)

{printf("是闰年\n");

return 1;

}

else

{printf("不是闰年\n");

return 0;

}

}

//

void main()

{ int year,mon,day;

struct z

{ int x,y;}b[12]={{1,31},{2,28},{3,31},{4,30},{5,31},{6,30},{7,31},{8,31},{9,30},{10,31},{11,30},{12,31}}; //这里的{131}改成{1,31}

int i,j,days;

printf("输入年份:");

scanf("%d",&year);

j=run(year);

if (j==1)

b[1]y+=1;

printf("输入月份:");

scanf("%d",&mon);

for (i=0;;i++)

{ if (mon<=0||mon>12)

{ printf("月份输入错误,请重新输入:");

scanf("%d",&mon);

}

else break;

}

//

for (i=mon-1;;i++)

{ printf("输入日期:");

scanf("%d",&day);

if (day>b[i]y||day<=0)

{ printf("日期输入错误请重新");continue;}

else

break;

}

/算天数/

for (days=0,i=0;i<mon-1;i++)

days=(b[i]y)+days;

days+=day;

printf("%d年%d月%d日是这年的第%d天",year,mon,day,days);

}

import javautilCalendar;

import javautilGregorianCalendar;

public class MyDate {

public static void main(String[] args) {

Calendar date = CalendargetInstance();

Systemoutprintln(dategetTime());

Systemoutprintln("");

Systemoutprintln("当前年份:" + dateget(CalendarYEAR) + " 年");

Systemoutprintln("当前月份:" + (dateget(CalendarMONTH) + 1) + " 月");

Systemoutprintln("当前日期:" + dateget(CalendarDATE) + " 日");

Systemoutprintln("");

Systemoutprintln("小时:" + dateget(CalendarHOUR) + " " + (dateget(CalendarAM_PM) == 0 "PM" : "AM"));

Systemoutprintln("小时:" + dateget(CalendarHOUR_OF_DAY));

Systemoutprintln("分钟:" + dateget(CalendarMINUTE));

Systemoutprintln("秒:" + dateget(CalendarSECOND));

Systemoutprintln("毫秒:" + dateget(CalendarMILLISECOND));

Systemoutprintln("");

Systemoutprintln(getWeekStr(dateget(CalendarDAY_OF_WEEK)));

Systemoutprintln("当前月份的第 " + dateget(CalendarDAY_OF_MONTH) + " 天");

Systemoutprintln("当前年份的第 " + dateget(CalendarDAY_OF_YEAR) + " 天");

Systemoutprintln("");

boolean b = ((GregorianCalendar) date)isLeapYear(dateget(CalendarYEAR));

if (b) {

Systemoutprintln("闰年");

} else {

Systemoutprintln("平年");

}

}

// 判断是否是闰年,是返回true,否则返回false

public static boolean isLeanYear(int year) {

boolean falg = false;

if ((year % 4 == 0) && (year % 100 != 0) || year % 400 == 0) {

falg = true;

}

return falg;

}

public static String getWeekStr(int num) {

switch (num) {

case 1:

return "星期 日";

case 2:

return "星期一 ";

case 3:

return "星期 二 ";

case 4:

return "星期三 ";

case 5:

return "星期 四";

case 6:

return "星期 五 ";

case 7:

return "星期六 ";

}

return "";

}

}

以上就是关于C++日期计算全部的内容,包括:C++日期计算、求c++计算日期算法、C语言程序问题 计算下一天的日期等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9277586.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-26
下一篇 2023-04-26

发表评论

登录后才能评论

评论列表(0条)

保存