You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java中如何比较用户输入的两个日期以实现餐厅预约日期校验

Java餐厅预约日期校验功能实现方案

我们推荐使用Java 8及以上版本内置的java.time包完成日期解析和比较,相比老旧的Calendar/Date类代码更简洁,出错概率更低。修改后完整代码如下:

import java.util.Scanner;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.time.format.DateTimeParseException;

public class BookRestaurant{
    // 存储管理员设置的最晚可预约日期
    private static String maxBookDateStr;
    // 统一日期格式解析器,对应mm/dd/yyyy格式
    private static final DateTimeFormatter DATE_FORMATTER = DateTimeFormatter.ofPattern("MM/dd/yyyy");

    public static void main(String[] args){
        Scanner key = new Scanner(System.in);
        String uName;
        String password;
        String dateByCust;

        System.out.print("请输入用户名: ");
        uName = key.nextLine();
        System.out.print("请输入密码: ");
        password = key.nextLine();
        
        // 此处可自行补充密码校验逻辑,演示暂省略
        switch (uName){
            case "admin":
                System.out.print("请输入餐厅可预约的最晚日期(格式mm/dd/yyyy): ");
                maxBookDateStr = key.nextLine();
                System.out.println("最晚预约日期设置成功");
                break;
            case "user":
                if(maxBookDateStr == null) {
                    System.out.println("预约功能暂未开放,请联系管理员设置可预约范围");
                    break;
                }
                LocalDate maxDate = LocalDate.parse(maxBookDateStr, DATE_FORMATTER);
                // 循环提示用户输入合法日期
                while(true) {
                    System.out.print("请输入要预约的日期(格式mm/dd/yyyy): ");
                    dateByCust = key.nextLine();
                    LocalDate custDate;
                    try {
                        custDate = LocalDate.parse(dateByCust, DATE_FORMATTER);
                    } catch (DateTimeParseException e) {
                        System.out.println("日期格式错误,请按照要求重新输入");
                        continue;
                    }
                    // 校验日期是否超出范围
                    if(custDate.isAfter(maxDate)) {
                        System.out.printf("预约日期超出范围,最晚可预约日期为%s,请重新输入%n", maxBookDateStr);
                    } else {
                        System.out.println("预约成功");
                        break;
                    }
                }
                break;
            default:
                System.out.println("用户名不存在");
        }
        System.out.print("感谢使用");
        key.close();
    }
}

核心逻辑说明

  • 用静态变量maxBookDateStr存储管理员设置的最晚日期,保证用户登录时可以读取到该配置
  • 日期比较使用LocalDate自带的isAfter方法,直接判断用户输入的日期是否晚于最大可预约日期
  • 增加了格式校验逻辑,用户输入格式不对或者日期超出范围时,会循环提示直到输入合法值

如果你一定要使用Calendar类实现,可参考如下日期比较逻辑:

import java.text.SimpleDateFormat;
import java.util.Calendar;

// 省略其他代码
SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy");
Calendar maxCal = Calendar.getInstance();
maxCal.setTime(sdf.parse(maxBookDateStr));
Calendar custCal = Calendar.getInstance();
custCal.setTime(sdf.parse(dateByCust));
if(custCal.after(maxCal)) {
    System.out.println("预约日期超出范围,请重新输入");
}

注意SimpleDateFormat是线程不安全的,生产环境不推荐使用。

内容的提问来源于stack exchange,提问作者sealuna

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 06:24:04