日期相关
求n天之后的日期
1.java实现
import java.util.Scanner;
class MyDate
{
private int day ;
private int month ;
private int year ;
public void print() //打印时间
{
System.out.printf("%04d-%02d-%02d", year, month, day);//以标准化格式打印日期
}
public MyDate(int year,int month,int day) //参数为具体年月日
{
this.day = day;
this.month = month;
this.year = year;
}
public MyDate(MyDate date) //参数为对象
{
this.day = date.day;
this.month = date.month;
this.year = date.year;
}
public MyDate addDays(int add_days,MyDate new_date) //计算日期,参数为需要增加的天数和现在的日期
{
MyDate temp_date = new MyDate(new_date); //临时对象,不改变现在的日期
while(true) //死循环
{
temp_date = nextDay(temp_date); //计算下一天
add_days--; //要增加的天数--
if(add_days == 0) //当要增加的天数等于0时,停止循环
break;
}
return temp_date;
}
public MyDate nextDay(MyDate date) //计算下一天
{
if(date.day == isLastDays(date.year,date.month)) //如果是月底
{
date.day = 1; //那么下一天则置天数为1
date.month++; //月份++
if(date.month == 13) //如果是年底
{
date.month = 1; //那么月份置为1
date.year++; //年份加1
}
}
else //如果不是月底,天数加一即可
date.day++;
return date;
}
public int isLastDays(int year,int month) //返回对应月份的天数
{
if(isRun(year) && month == 2)
return 29;
if(month == 2)
return 28;
if(month == 4 || month == 6 || month == 9 || month == 11)
return 30;
return 31;
}
public boolean isRun(int year) //判断是否为闰年
{
if(year%400 == 0 || (year %4 == 0 && year %100 != 0))
return true;
else
return false;
}
}
public class Main {
public static void main(String[] args)
{
Scanner input = new Scanner(System.in);
String[] sa=input.nextLine().split("-");
int nowtime[] = new int[3];
for(int i = 0; i < 3;i++)
nowtime[i] = Integer.parseInt(sa[i]); //读取现在的时间
int days = input.nextInt(); //读取要增加的天数
MyDate nowdays = new MyDate(nowtime[0],nowtime[1],nowtime[2]); //实例化对象-现在的时间
MyDate nextdays = nowdays.addDays(days,nowdays); //计算增加天数后的日期
nextdays.print();
input.close();
}
}
2.c++实现
#include <cstdio>
int dayOfMonth[2][13] = {
{0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31},
{0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}
};
bool isLeapYear(int year) {
return year % 400 == 0 || (year % 4 == 0 && year % 100 != 0);
}
void addOneDay(int &year, int &month, int &day) {
day++;
if (day > dayOfMonth[isLeapYear(year)][month]) {
month++;
day = 1;
}
if (month > 12) {
year++;
month = 1;
}
}
int main() {
int year, month, day, n;
scanf("%d-%d-%d", &year, &month, &day);
scanf("%d", &n);
for (int i = 0; i < n; i++) {
addOneDay(year, month, day);
}
printf("%04d-%02d-%02d", year, month, day);
return 0;
}
es