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;
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)