使用我自己的Date类将Date作为用户输入

问题描述 投票:-2回答:1

我正在开发一个应用程序,在里面我必须从用户那里获取日期,而且只有日期,不需要时间。而我被要求使用一个 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中任何预定义的库。

java date oop java.util.scanner
1个回答
1
投票

我知道这是作业,你不允许用 LocalDate (就像在生产代码中无条件地做的那样)。

选项包括(并不限于)。

  1. 依次使用三次调用来读取月、日、年这三个数字。Scanner.nextInt(). 把这三个数字传给你 Date 构造函数。
  2. 读取日期,例如 29-05-2020 从用户使用 Scanner.next()Scanner.nextLine(). 在连字符处进行分割。将每个数字解析为一个 int 使用 Integer.parseInt(). 将三个解析后的数字传递给构造函数。

文档链接。


2
投票

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 如上图所示。

小贴士

  • 组织你的思维和代码,先做大范围的工作,后做详细的范围。所以年-月-日而不是日-月-年。
  • 了解 ISO 8601 标准,用于在交换数据时将日期-时间值格式化为文本。
  • 学习 java.time 甲骨文教程.
© www.soinside.com 2019 - 2024. All rights reserved.