#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语言程序问题 计算下一天的日期等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)