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
相关产品推荐
相关产品推荐

