java 例3.2 mydate_完善例题3.2 日期类 MyDate
时间: 2024-03-25 17:40:54 浏览: 100
好的,我了解了您的问题。让我来回答您的问题。
MyDate 是一个日期类,它可以存储年、月、日的信息,并且能够对日期进行一些操作。下面是完善后的 MyDate 类的代码示例:
```java
public class MyDate {
private int year;
private int month;
private int day;
public MyDate(int year, int month, int day) {
this.year = year;
this.month = month;
this.day = day;
}
public int getYear() {
return year;
}
public int getMonth() {
return month;
}
public int getDay() {
return day;
}
public void setYear(int year) {
this.year = year;
}
public void setMonth(int month) {
this.month = month;
}
public void setDay(int day) {
this.day = day;
}
public void setDate(int year, int month, int day) {
this.year = year;
this.month = month;
this.day = day;
}
public String toString() {
return String.format("%04d-%02d-%02d", year, month, day);
}
public boolean equals(Object obj) {
if (obj instanceof MyDate) {
MyDate date = (MyDate) obj;
return year == date.year && month == date.month && day == date.day;
}
return false;
}
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + day;
result = prime * result + month;
result = prime * result + year;
return result;
}
public MyDate nextDay() {
int nextDay = day + 1;
int nextMonth = month;
int nextYear = year;
if (nextDay > getDaysInMonth(year, month)) {
nextDay = 1;
nextMonth++;
if (nextMonth > 12) {
nextMonth = 1;
nextYear++;
}
}
return new MyDate(nextYear, nextMonth, nextDay);
}
public MyDate nextMonth() {
int nextMonth = month + 1;
int nextYear = year;
if (nextMonth > 12) {
nextMonth = 1;
nextYear++;
}
int maxDay = getDaysInMonth(nextYear, nextMonth);
int nextDay = Math.min(day, maxDay);
return new MyDate(nextYear, nextMonth, nextDay);
}
public MyDate nextYear() {
int nextYear = year + 1;
int maxDay = getDaysInMonth(nextYear, month);
int nextDay = Math.min(day, maxDay);
return new MyDate(nextYear, month, nextDay);
}
private int getDaysInMonth(int year, int month) {
switch (month) {
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
return 31;
case 4:
case 6:
case 9:
case 11:
return 30;
case 2:
if (isLeapYear(year)) {
return 29;
} else {
return 28;
}
default:
throw new IllegalArgumentException("Invalid month: " + month);
}
}
private boolean isLeapYear(int year) {
if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) {
return true;
} else {
return false;
}
}
}
```
在这个类中,我们实现了以下方法:
- 构造方法 MyDate(int year, int month, int day):用于创建一个日期对象。
- getYear()、getMonth()、getDay():用于获取年、月、日。
- setYear()、setMonth()、setDay():用于设置年、月、日。
- setDate(int year, int month, int day):用于设置年、月、日。
- toString():用于以字符串形式返回当前日期。
- equals(Object obj):用于判断当前日期是否与另一个日期相等。
- hashCode():用于生成当前日期的哈希码。
- nextDay()、nextMonth()、nextYear():用于获取当前日期的下一天、下一个月、下一年。
- getDaysInMonth(int year, int month):用于获取指定年月的天数。
- isLeapYear(int year):用于判断指定年是否为闰年。
这些方法可以帮助我们对日期进行各种操作,比如获取下一天的日期、判断两个日期是否相等等等。
阅读全文