簡體   English   中英

如何在用戶輸入兩個日期的 Java 中比較兩個日期?

[英]How to compare two dates in Java where both dates are entered by user?

我是編碼初學者,我需要用 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");
    }
}

您必須轉換已輸入的日期。 您可以使用 java.text.SimpleDateFormat 類。

示例如何使用 java.text.SimpleDateFormat

時間

我建議您使用 java.time,現代 Java 日期和時間 API 來進行日期工作。 您將需要按照您在代碼中已經執行的方式從用戶讀取字符串,並將該字符串解析(轉換)為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 教程:日期時間

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM