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

Java实现自动取当日日期+用户输入时间构建Flight时间字段

简单直接的Java实现方案

完全明白你的困惑,旧的Date、Timestamp确实难用,而且Java 8之后的时间API已经把这些问题解决了。我给你一个极简的方案,用LocalDateTime来存航班的出发/到达时间,完美适配你的需求:

核心思路

  • 用**LocalDateTime**作为Flight类中departure和arrival的字段类型:它天生就是「日期+时间」的组合,线程安全,操作起来比旧API舒服太多。
  • 用LocalDate.now()自动获取当日日期,不用用户输入。
  • 让用户输入HH:mm格式的字符串,用DateTimeFormatter解析成LocalTime,再和当日日期拼接成LocalDateTime。

完整代码示例

1. 定义Flight类

import java.time.LocalDateTime;

public class Flight {
    private LocalDateTime departure;
    private LocalDateTime arrival;

    // 构造方法、getter/setter按需添加
    public Flight(LocalDateTime departure, LocalDateTime arrival) {
        this.departure = departure;
        this.arrival = arrival;
    }

    @Override
    public String toString() {
        return "Flight{" +
                "departure=" + departure +
                ", arrival=" + arrival +
                '}';
    }
}

2. 用Scanner实现用户输入与时间拼接

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

public class FlightInputDemo {
    private static final DateTimeFormatter TIME_FORMATTER = DateTimeFormatter.ofPattern("HH:mm");
    private static final Scanner SCANNER = new Scanner(System.in);

    public static void main(String[] args) {
        // 获取当日日期
        LocalDate today = LocalDate.now();

        // 获取并解析出发时间
        LocalTime departureTime = getValidTimeInput("请输入出发时间(HH:mm):");
        LocalDateTime departure = today.atTime(departureTime);

        // 获取并解析到达时间
        LocalTime arrivalTime = getValidTimeInput("请输入到达时间(HH:mm):");
        LocalDateTime arrival = today.atTime(arrivalTime);

        // 创建航班对象
        Flight flight = new Flight(departure, arrival);
        System.out.println("成功创建航班:" + flight);

        SCANNER.close();
    }

    // 封装一个复用的方法,处理用户输入的时间格式验证
    private static LocalTime getValidTimeInput(String prompt) {
        while (true) {
            System.out.print(prompt);
            String input = SCANNER.nextLine().trim();
            try {
                return LocalTime.parse(input, TIME_FORMATTER);
            } catch (DateTimeParseException e) {
                System.out.println("输入格式错误,请按照HH:mm格式重新输入!");
            }
        }
    }
}

为什么选这些类型?

  • LocalDate:专门表示日期,LocalDate.now()直接拿当日,需要指定时区的话可以加ZoneId,比如LocalDate.now(ZoneId.of("Asia/Shanghai"))。
  • LocalTime:专门表示时间,正好对应用户输入的HH:mm,解析起来毫无压力。
  • LocalDateTime:把上面两者拼接起来,完美对应航班的「出发日期+时间」需求,而且是不可变类,线程安全,比旧的Date靠谱多了。
  • 完全不用碰Timestamp(那是给数据库交互用的)或者旧Date(可变、API设计混乱)。

这个方案简单易懂,还加了输入格式验证,用户输错了会提示重新输入,非常实用~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:36:06