目前我上了班级' Flight'使用Date数据类型;出发和到达日期时间。
通过用户输入添加航班。该日期应自动为当前日期,时间是用户的选择。这意味着一个人只需要输入HH:mm。
目前,所有选择都有点令人困惑;时间戳,日期,当地时间等。
如何使用扫描仪为此问题进行简单的用户输入? 它应该采取今天的日期,添加包含时间的用户输入并将其添加到我的Date数据类型中。
任何人都知道如何做到这一点或者可以提供一些提示/最佳做法?
答案 0 :(得分:1)
由于您说您正在开发桌面应用并且需要当前日期(在PC上),因此您可以使用LocalDate
和LocalTime
的组合来实现目标。
以下是代码:
public static void main(String[] args) {
LocalDate currentDate = LocalDate.now();
LocalTime userInputTime = null;
Scanner sc = new Scanner(System.in);
String dateTimeLine = sc.nextLine();
sc.close();
DateTimeFormatter dt = DateTimeFormatter.ofPattern("HH:mm");
userInputTime = LocalTime.parse(dateTimeLine,dtf);
System.err.println(LocalDateTime.of(currentDate, userInputTime));
}
首先,您使用LocalDate.now()
来生成当前日期(仅限日期,不包括小时,分钟和秒)。
接下来,我们使用Scanner
来读取用户输入的字符串。
为了将字符串转换为LocalTime
(此类仅包含一天中的时间信息,因此它具有小时,分钟,秒和纳秒的值),我们必须定义DateTimeFormatter
。 DateTimeFormatter
定义了如何将字符串转换为LocalTime
实例。
在我刚写的代码中,我说字符串输入的类型为“hours:minutes”。例如,可能的值为:
“10:25” - 10小时25分钟,
“23:00” - 23小时0分钟,
“02:13” - 2小时13分钟。
在我们创建LocalTime
对象之后,我们所要做的就是连接日期和时间对象,以便创建一个LocalDateTime对象,该对象在此行中完成:
LocalDateTime.of(currentDate, userInputTime)
因此,我们可以说当前PC上的日期是2018-05-06。如果您运行程序并在控制台中输入10:50,则输出应为LocalDateTime
对象,其中2018-05-06为日期,10小时50分钟为当天时间。
重要的是要注意这一行:
userInputTime = LocalTime.parse(dateTimeLine,dtf);
将抛出java.time.format.DateTimeParseException
。