Java - 自动生成当天+用户输入时间

时间:2018-05-06 11:42:25

标签: java date time user-input

目前我上了班级' Flight'使用Date数据类型;出发和到达日期时间。

通过用户输入添加航班。该日期应自动为当前日期,时间是用户的选择。这意味着一个人只需要输入HH:mm。

目前,所有选择都有点令人困惑;时间戳,日期,当地时间等。

如何使用扫描仪为此问题进行简单的用户输入? 它应该采取今天的日期,添加包含时间的用户输入并将其添加到我的Date数据类型中。

任何人都知道如何做到这一点或者可以提供一些提示/最佳做法?

1 个答案:

答案 0 :(得分:1)

由于您说您正在开发桌面应用并且需要当前日期(在PC上),因此您可以使用LocalDateLocalTime的组合来实现目标。

以下是代码:

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(此类仅包含一天中的时间信息,因此它具有小时,分钟,秒和纳秒的值),我们必须定义DateTimeFormatterDateTimeFormatter定义了如何将字符串转换为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