【问题标题】:How to compare two dates in Java where both dates are entered by user? [duplicate]java - 如何比较用户输入两个日期的Java中的两个日期? [复制]
【发布时间】:2021-12-27 04:01:58
【问题描述】:

我是编码初学者,我需要用 Java 编写一个程序,餐厅管理员可以在其中输入日期(2022 年 1 月 10 日),直到顾客可以在他们的餐厅预订以及顾客想要预订餐厅在管理员输入的日期(2022 年 2 月 12 日)之后,客户需要选择另一个日期(必须在 2022 年 1 月 10 日之前或之后)。

我读到了日历类和时间类,但仍然无法弄清楚。我该怎么做?很抱歉,我什至无法展示有关该程序的代码的最小部分,因为我真的不知道该怎么做。

import java.util.*;
public class BookRestaurant{
    public static void main(String[] args){
        Scanner key = new Scanner(System.in);
        String uName;
        String password;
        String dateByAdmin;
        String dateByCust;

        System.out.print("Enter username: ");
        uName = key.nextLine();
        System.out.print("Enter password: ");
        password = key.nextLine();
        switch (uName){
            case "admin":
                System.out.print("Enter until what date restaurant open(mm/dd/yyyy): ");
                dateByAdmin = key.nextLine();
            break;
            case "user":
                System.out.print("Enter book date(mm/dd/yyyy): ");
                dateByCust = key.nextLine();
                //this is where the customer need to get asked to enter another date
            break;
        }
        System.out.print("Thank You");
    }
}

【问题讨论】:

  • 这听起来像是家庭作业。如果是这样的话。我想你的老师已经阅读了语言的必要部分来做到这一点。如果您真的不知道从哪里开始,我建议您与他们讨论这个问题。但是,如果您希望在这里获得帮助,则需要尝试编写代码。
  • 很抱歉没有事先提供代码。关于讲师,我的讲师更喜欢直接从PowerPoint幻灯片而不是通过代码示例来解释讲座,所以我无法过多地关注它,而且在这个在线学习中很难联系到她
  • 该幻灯片涵盖了哪些相关的 Java 类?
  • 已经在 StackOverflow 上。 Link

标签: java date date-comparison


【解决方案1】:

java.time

我建议您使用现代 Java 日期和时间 API java.time 进行日期工作。您将需要按照您在代码中已经执行的方式从用户那里读取一个字符串,并将该字符串解析(转换)为一个LocalDate 对象。我们首先声明一个用于解析的格式化程序:

private static final DateTimeFormatter DATE_FORMATTER 
        = DateTimeFormatter.ofPattern("M/d/u", Locale.US);

现在读取、解析和比较可能是这样的:

    Scanner key = new Scanner(System.in);
    
    System.out.println("Admin: Enter until what date restaurant open (mm/dd/yyyy): ");
    String dateByAdminString = key.nextLine();
    LocalDate lastReservationDate = LocalDate.parse(dateByAdminString, DATE_FORMATTER);

    System.out.println("Customer: Enter book date (mm/dd/yyyy):");
    String dateByCustString = key.nextLine();
    LocalDate bookDate = LocalDate.parse(dateByCustString, DATE_FORMATTER);
    while (bookDate.isAfter(lastReservationDate)) {
        System.out.println("Book date must not be after "
                + lastReservationDate.format(DATE_FORMATTER)
                + ". Enter an earlier date:");
        dateByCustString = key.nextLine();
        bookDate = LocalDate.parse(dateByCustString, DATE_FORMATTER);
    }

    System.out.println("Customer chose to book on " + bookDate);

示例会话:

Admin: Enter until what date restaurant open (mm/dd/yyyy): 
01/10/2022
Customer: Enter book date (mm/dd/yyyy):
02/12/2022
Book date must not be after 1/10/2022. Enter an earlier date:
1/10/2022
Customer chose to book on 2022-01-10

在管理员输入最后一个预订日期之前接受用户日期是没有意义的。我不知道你将如何在你的代码中管理它。由于我的代码只是用来演示解析和比较,所以我忽略了这个问题。

教程链接: Oracle Tutorial: Date Time

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-01-12
    • 2017-07-15
    • 1970-01-01
    • 2017-04-10
    • 2013-05-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多