java编写一个Date类: 1)有nextDay方法,能够实现增加一天的功能(考虑如果是某月最后一天,加一天后应该到下个月的第一天;如果是某年的最后一天,加一天后到下一年的第一天); 2)要对日期进行验证;
时间: 2023-08-31 21:27:34 浏览: 180
### 回答1:
以下是一份示例代码:
```
import java.util.Calendar;
import java.util.Date;
public class MyDate {
private int year;
private int month;
private int day;
public MyDate(int year, int month, int day) {
if (!validateDate(year, month, day)) {
throw new IllegalArgumentException("Invalid date");
}
this.year = year;
this.month = month;
this.day = day;
}
private boolean validateDate(int year, int month, int day) {
if (year < 0 || month < 1 || month > 12 || day < 1 || day > 31) {
return false;
}
//判断每个月的最大天数
int maxDay = 31;
switch (month) {
case 2:
if (isLeapYear(year)) {
maxDay = 29;
} else {
maxDay = 28;
}
break;
case 4:
case 6:
case 9:
case 11:
maxDay = 30;
break;
default:
break;
}
if (day > maxDay) {
return false;
}
return true;
}
private boolean isLeapYear(int year) {
return (year % 400 == 0 || (year % 100 != 0 && year % 4 == 0));
}
public void nextDay() {
Calendar c = Calendar.getInstance();
c.set(year, month - 1, day);
c.add(Calendar.DATE, 1);
year = c.get(Calendar.YEAR);
month = c.get(Calendar.MONTH) + 1;
day = c.get(Calendar.DATE);
}
@Override
public String toString() {
return year + "-" + month + "-" + day;
}
}
```
这份代码实现了一个自定义的日期类`MyDate`,它提供了一个`nextDay`方法,能够增加一天。它还进行了日期的验证,如果输入的年、月、日不合法,会抛出`IllegalArgumentException`异常。
### 回答2:
下面是一个简单的Java程序,实现了Date类的要求:
```java
import java.util.Scanner;
public class Date {
private int year;
private int month;
private int day;
public Date(int year, int month, int day) {
this.year = year;
this.month = month;
this.day = day;
}
public void nextDay() {
int lastDayOfMonth = getLastDayOfMonth(year, month);
if (day < lastDayOfMonth) {
day++;
} else if (month < 12) {
month++;
day = 1;
} else {
year++;
month = 1;
day = 1;
}
}
private int getLastDayOfMonth(int year, int month) {
int lastDay = 0;
switch(month) {
case 2:
if (isLeapYear(year)) {
lastDay = 29;
} else {
lastDay = 28;
}
break;
case 4:
case 6:
case 9:
case 11:
lastDay = 30;
break;
default:
lastDay = 31;
break;
}
return lastDay;
}
private boolean isLeapYear(int year) {
return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("请输入年份:");
int year = scanner.nextInt();
System.out.print("请输入月份:");
int month = scanner.nextInt();
System.out.print("请输入日期:");
int day = scanner.nextInt();
Date date = new Date(year, month, day);
if (isValidDate(year, month, day)) {
date.nextDay();
System.out.println("下一天的日期是:" + date.year + "年" + date.month + "月" + date.day + "日");
} else {
System.out.println("输入的日期不合法!");
}
}
public static boolean isValidDate(int year, int month, int day) {
if (year < 1 || year > 9999 || month < 1 || month > 12 || day < 1 || day > 31) {
return false;
}
switch(month) {
case 2:
if (isLeapYear(year)) {
return (day <= 29);
} else {
return (day <= 28);
}
case 4:
case 6:
case 9:
case 11:
return (day <= 30);
default:
return (day <= 31);
}
}
}
```
这个程序中,Date类有一个nextDay方法,用于增加一天。根据输入的年、月、日,通过判断日是否是该月最后一天,以及月是否是该年最后一月来决定是否需要跳转到下一个月或下一年。getLastDayOfMonth方法用于获取某个月的最后一天。isLeapYear方法用于判断某年是否是闰年。
在主函数中,首先从用户那里获取年、月和日的输入。然后创建一个Date对象,并验证输入的日期是否合法。如果合法,调用nextDay方法来获取下一天的日期,并输出。如果不合法,输出提示信息。isValidDate方法用于验证输入的日期是否合法。根据闰年的情况和各月的天数来判断。
### 回答3:
首先,我们要创建一个Date类来实现增加一天的功能。在Date类中,我们需要有一个私有的成员变量来表示日期,我将其命名为date。
接下来,我们需要实现nextDay方法,以实现增加一天的功能。在这个方法中,我先对date进行验证,确保它是一个合法的日期。我会使用SimpleDateFormat类来进行日期的格式化和解析。
然后,我会获取当前日期中的年、月、日,并依此进行计算。如果当前日期是某月的最后一天,我将日期设置为下一个月的第一天。如果当前日期是某年的最后一天,我将日期设置为下一年的第一天。
最后,我会将增加一天后的日期保存到date中,并返回它。
以下是一个简单的实现:
```java
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
public class Date {
private String date;
public Date(String date) {
this.date = date;
}
public String nextDay() {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
try {
sdf.parse(date);
} catch (ParseException e) {
return "Invalid date";
}
Calendar calendar = Calendar.getInstance();
calendar.setLenient(false);
try {
calendar.setTime(sdf.parse(date));
} catch (ParseException e) {
return "Invalid date";
}
calendar.add(Calendar.DAY_OF_MONTH, 1);
int day = calendar.get(Calendar.DAY_OF_MONTH);
int month = calendar.get(Calendar.MONTH) + 1;
int year = calendar.get(Calendar.YEAR);
if (day == 1) {
if (month == 12) {
month = 1;
year++;
} else {
month++;
}
}
return year + "-" + month + "-" + day;
}
}
```
在以上的代码中,我们首先通过SimpleDateFormat对输入的日期进行格式化和解析。然后,使用Calendar类来进行日期的计算。最后,我们将增加一天后的日期格式化为字符串并返回。如果输入的日期不合法,我们会返回一个错误信息。
这就是一个简单的Java Date类,它可以实现增加一天的功能并进行日期的验证。
阅读全文