我正在开发一个应用程序,在里面我必须从用户那里获取日期,而且只有日期,不需要时间。而我被要求使用一个 Date
类来表示日期。但是我不知道如何用扫描器类从用户那里得到正常输入的日期。
日期类如下图所示,那么我怎样才能得到输入的日期呢?
我是编程新手,请帮我解决这个问题。
public class Date {
private int day;
private int month;
private int year;
public Date(int day, int month, int year) {
this.day = day;
this.month = month;
this.year = year;
}
public int getDay() {
return day;
}
public void setDay(int day) {
this.day = day;
}
public int getMonth() {
return month;
}
public void setMonth(int month) {
this.month = month;
}
public int getYear() {
return year;
}
public void setYear(int year) {
this.year = year;
}
@Override
public String toString() {
return "Date{" +
"day=" + day +
", month=" + month +
", year=" + year +
'}';
}
}
这是一个作业,它要求我们实现一个 Date
这样的类,它要求我们避免使用Java中任何预定义的库。
我知道这是作业,你不允许用 LocalDate
(就像在生产代码中无条件地做的那样)。
选项包括(并不限于)。
Scanner.nextInt()
. 把这三个数字传给你 Date
构造函数。29-05-2020
从用户使用 Scanner.next()
或 Scanner.nextLine()
. 在连字符处进行分割。将每个数字解析为一个 int
使用 Integer.parseInt()
. 将三个解析后的数字传递给构造函数。文档链接。
java.time.LocalDate
我们有一个类来处理这个问题: LocalDate
. 不要重新发明轮子。
而且要知道,日期-时间处理是令人惊讶的棘手工作--不要尝试滚动-自己的解决方案。始终使用业界领先的 java.time 班。
LocalDate ld = LocalDate.of( 2021 , 1 , 23 ) ; // January 23, 2021.
String output = ld.toString() ;
2021-01-23
在一个控制台应用程序中,使用 Scanner
类,要求用户输入ISO 8601格式的日期YYYY-MM-DD。
LocalDate ld = LocalDate.parse( "2021-01-23" ) ;
或者,要求分别输入年、月、日。将每个日期解析为一个整数,并通过三个 int
值到 LocalDate.of
如上图所示。
小贴士