定义一个关于日期时间的类,并在类中定义构造函数、析构函数,然后声明对象,判断该日期是否为闰年并输出

定义一个关于日期时间的类,并在类中定义构造函数、析构函数,然后声明对象,判断该日期是否为闰年并输出,第1张

class Date//默认一个月是30天

{

public:

Date(int x=2011,int y=1,int z=8):year(x),month(y),day(z)//构造函数

{

cout<<"初始化日期是:"<<year<<"年"<<month<<"月"<<day<<"日"<<endl;

}

~Date(){}//析构函数

void NextDate()

{

day++;

if (day>30)

{

day=day-30;

month++;

}

if (month>12)

{

month=month-12;

year++;

}

cout<<"the next date is "<<year<<" 年"<<month<<" 月"<<day<<" 日"<<endl;

}

public String Leapyear(){

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

return 1;

}

private:

int year;

int month;

int day;

};

int main()

{

Date date1;

Date date2(2011,12,30);

date1NextDate();

date2NextDate();

if(data1Leapyear() == 1)

cout<<"the next date is "<<year<<" 年"<<month<<" 月"<<day<<" 日"<<endl;

else

return;

if(data1Leapyear() == 1)

cout<<"the next date is "<<year<<" 年"<<month<<" 月"<<day<<" 日"<<endl;

else

return;

}

1、使用new Date()获取当前日期,new Date()getTime()获取当前毫秒数

2、计算公式,等于获取的当前日期减去或者加上一天的毫秒数。一天的毫秒数的计算公式:24小时60分钟60秒1000毫秒,也是86400000毫秒。

举例:

Date curDate = new Date();

var preDate = new Date(curDategetTime() - 2460601000); //前一天

var nextDate = new Date(curDategetTime() + 2460601000); //后一天

以下使用后台输出表示。

扩展资料

var myDate = new Date();

myDategetYear();        //获取当前年份(2位)

myDategetFullYear();    //获取完整的年份(4位,1970-)

myDategetMonth();       //获取当前月份(0-11,0代表1月)

myDategetDate();        //获取当前日(1-31)

myDategetDay();         //获取当前星期X(0-6,0代表星期天)

myDategetTime();        //获取当前时间(从197011开始的毫秒数)

myDategetHours();       //获取当前小时数(0-23)

myDategetMinutes();     //获取当前分钟数(0-59)

myDategetSeconds();     //获取当前秒数(0-59)

myDategetMilliseconds();    //获取当前毫秒数(0-999)

myDatetoLocaleDateString();     //获取当前日期

var mytime=myDatetoLocaleTimeString();     //获取当前时间

myDatetoLocaleString( );        //获取日期与时间

DateprototypeisLeapYear 判断闰年

DateprototypeFormat 日期格式化

DateprototypeDateAdd 日期计算

DateprototypeDateDiff 比较日期差

DateprototypetoString 日期转字符串

DateprototypetoArray 日期分割为数组

DateprototypeDatePart 取日期的部分信息

DateprototypeMaxDayOfDate 取日期所在月的最大天数

DateprototypeWeekNumOfYear 判断日期所在年的第几周

StringToDate 字符串转日期型

IsValidDate 验证日期有效性

CheckDateTime 完整日期时间检查

daysBetween 日期天数差

#include <iostreamh>

class Date //默认一个月是30天

{

public:

Date(int x=2011,int y=1,int z=8):year(x),month(y),day(z)//初始化带参构造,对year、month、day进行赋值

{

cout<<"初始化日期是:"<<year<<"年"<<month<<"月"<<day<<"日"<<endl;//输出私有成员变量的值(日期)

}

void NextDate() //计算明天的日期,如2011年1月8日,下一天计算的值为2011年1月9日,同理可知

{

day++;

if (day>30)

{

day=day-30;

month++;

}

if (month>12)

{

month=month-12;

year++;

}

cout<<"the next date is "<<year<<" 年"<<month<<" 月"<<day<<" 日"<<endl;//输出下一天的日期值

}

private:

int year;

int month;

int day;

};

int main()

{

Date date1;//声明Date对象,将调用默认构造,日期为默认值2011/1/8

Date date2(2011,12,30);//声明Date对象,调用带参构造,日期值为传入的日期2011/12/30

date1NextDate();//调用NextDate函数计算当前日期的下一天

date2NextDate();

return 0;

}

#include <iostream>

using namespace std;

class Date//默认一个月是30天

{

public:

Date(int x=2011,int y=1,int z=8):year(x),month(y),day(z)

{

cout<<"初始化日期是:"<<year<<"年"<<month<<"月"<<day<<"日"<<endl;

}

~Date(){}

void NextDate()

{

day++;

if (day>30)

{

day=day-30;

month++;

}

if (month>12)

{

month=month-12;

year++;

}

cout<<"the next date is "<<year<<" 年"<<month<<" 月"<<day<<" 日"<<endl;

}

private:

int year;

int month;

int day;

};

int main()

{

Date date1;

Date date2(2011,12,30);

date1NextDate();

date2NextDate();

return 0;

}

使用的编译环境是vc60,你可以试试的 往后的知识内容你可以试试 *** 作符号的重载,也很方便的

1 输入是否合法

day_list[12] = {31,28,31,30,31,30,31,31,30,31,30,31};

// 判断条件:

( year>=1920 && year<=2050 ) &&

(

( month>=1 && month<=12 && day>=1 && day<=day_list[month-1] )||

( month==2 && isLeap(year) && day>=1 && day<=29 )

)

2

/

函数说明: int NextDate(int month,int day,int year)

如果还有明天,返回1;

如果输入不合法,返回-1;

如果超出处理范围,返回-2

/

int bLeapYear;

int newY,newM,newD;

newY = year;

newM = month;

newD = day;

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

if ( year>=1920 && year<=2050 )

{

if ( month>=1 && month<=12 && day>=1 )

{

if ( day<day_list[month-1] )

{

newD += 1;

}

else if ( day==day_list[month-1] && !bLeapYear )

{

if ( month==12 && day==31 )

{

if ( year==2050 ) return -2;

else

{

newY += 1; newM = 1; newD = 1;

}

}

else

{

newM += 1; newD = 1;

}

}

else if ( month==2 && bLeapYear )

{

if ( day==28 ) newD = 29;

else if( day==29 )

{ newM = 3; newD = 1; }

else return -1;

} else return -1;

}

}

// 输出

return 1;

3 测试方法:

31 闰年二月的最后一天

32 闰年二月的第28天

33 非闰年二月的第28天

34 每年的非二月的月末

35 每年的十二月的月末

36 2050年十二月的月末

37

year>2050 || year<1920 || month<1 || month>12 || day<1 ||

(day>day_list[month-1] && month>=1 && month<=12 && month!=2 ) ||

(day>28 && month==2 && !bLeapYear ) ||

(day>29 && month==2 && bLeapYear )

38 闰年非二月的月末 (34的分支)

测试出程序错误:

41

else if ( day==day_list[month-1] && !bLeapYear )

应改为:

else if ( day==day_list[month-1] && month!=2 )

42

else if ( month==2 && bLeapYear )

{

if ( day==28 ) newD = 29;

else if( day==29 )

{ newM = 3; newD = 1; }

else return -1;

}

应改为:

else if ( month==2 )

{

if ( day==28 && bLeapYear ) newD = 29;

else if( day==28 && !bLeapYear || ( day==29 && bLeapYear ) )

{ newM = 3; newD = 1; }

else return -1;

}

Java代码实现如下:

import javautilScanner;

public class NextDate {

    //判断某一年是不是闰年的函数

    public static boolean leapYear(int year){

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

            //是闰年

            return true;

        }

        return false;

    }

    

    public static void main(String[] args) {

        Systemoutprintln("Enter today’s date inform MM DD YYYY");

        Scanner sc = new Scanner(Systemin);

        int month = scnextInt();

        int day = scnextInt();

        int year = scnextInt();

        int tomorrowDay  = 0;

        int tomorrowMonth  = 0;

        if(month==1){//case 1

            if(day<31)

                tomorrowDay = day+1;

            else{

                tomorrowDay = 1;

                tomorrowMonth = month+1;

            }

        }else if(month==4){//case 2

            if(day<30){

                tomorrowDay = day+1;

            }else{

                tomorrowDay = 1;

                tomorrowMonth=month+1;

            }

        }else if(month==12){//case 3

            if(day<31){

                tomorrowDay = day+1;

            }else{

                tomorrowDay=1;

                tomorrowMonth=1;

            }

            if(year==2012){

                Systemoutprintln("2012 is over");

            }else{

                year=year+1;

            }

        }else if(month==2){//case 4

            if(day<28){

                tomorrowDay=day+1;

            }else{

                if(day==28){

                    if(leapYear(year)){//是不是闰年的函数

                        tomorrowDay = 29;

                    }else{

                        tomorrowDay=1;

                        tomorrowMonth=3;

                    }

                }else if(day==29){

                    tomorrowDay=1;

                    tomorrowMonth=3;

                }else{

                    Systemoutprintln("Cannot have Feb"+day);

                }

            }

        }

    }

}

运行结果如图:

/ 你问题中最核心的问题就是从一个日期计算一天后的日期的算法,

下面的程序中 核心函数 nextDate 实现了你所想要的功能

设日期串 date 存储格式如下:

yyyymmdd

nextDate(date) 调用后会将 date 的内容按公历历法更改为下一天的日期的表示形式

nextDate 的实现原理见其注解 /

#include "stdioh"

#include "stringh"

char nextDate(char date);

void main(){

char date1[9] = "", date2[9] = "";

printf("Please input a date(YYYYMMDD): ");

gets(date2);

printf("\n");

strcpy(date1, nextDate(date2));

printf("The next Date is: %s\n", date1);

getchar();

}

/ 几个功能函数: /

int getYear(char date){

int i, Y = 0;

for (i = 0; i < 4; i++, date++){

Y = 10;

Y += (date - '0');

}

return Y;

}

int getMonth(char date){

int i, M = 0;

for (date += 4, i = 0; i < 2; i++, date++){

M = 10;

M += (date - '0');

}

return M;

}

int getDay(char date){

int i, D = 0;

for (date += 6, i = 0; i < 2; i++, date++){

D = 10;

D += (date - '0');

}

return D;

}

/ 闰年份的判断 /

int isLeap(int year){

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

}

int isBigMonth(int month){

return ((month % 2 == 1) && (month < 8)) || / 小于 8 的奇数 /

((month % 2 == 0) && (month > 7)); / 大于 7 的偶数 /

}

int isSmallMonth(int month){

return (month != 2) && !isBigMonth(month);

}

void toStr(char Str, int n, int bit){

char Temp[255] = "";

strcpy(Str, "");

while ((bit--) > 0){

strcpy(Temp, Str);

Str = (char)(n % 10+'0');

(Str + 1) = '\0';

strcat(Str, Temp);

n /= 10;

}

}

void setDate(char date, int y, int m, int d){

toStr(date, y, 4);

toStr(date + 4, m, 2);

toStr(date + 6, d, 2);

}

char nextDate(char date){

/

大月 31 日(包括年末);

小月 30 日;

平 2 月 28 日;

闰 2 月 29 日

对这些情况一律将 日段 变为 "01",

然后进一步判断当前月是否 12 月,

是则, 月段 变为 "01", 年段 + 1;

否则, 月段 + 1

其它的情况则只是简单的把 日段 加 1, 年, 月段不变 /

/ 大月末 /

if (getDay(date) >= 31){

setDate(date, getYear(date), getMonth(date) + 1, 1);

/ 年末 /

if (getMonth(date) >= 12) setDate(date, getYear(date) + 1, 1, 1);

}

/ 小月末 或 大月 30 日 /

else if (getDay(date) == 30){

if (isSmallMonth(getMonth(date))) setDate(date, getYear(date), getMonth(date) + 1, 1);

else setDate(date, getYear(date), getMonth(date), 31); / 大月 30 日 /

}

/ 2 月末 /

else if (((getDay(date) == 29) && (getMonth(date) == 2) && isLeap(getYear

(date))) || ((getDay(date) == 28) && (getMonth(date) == 2) && !isLeap

(getYear(date))))

setDate(date, getYear(date), 3, 1);

/ 平日 /

else setDate(date, getYear(date), getMonth(date), getDay(date) + 1);

return date;

}

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

原文地址: https://outofmemory.cn/langs/11676226.html

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

发表评论

登录后才能评论

评论列表(0条)

保存