LocalDateTime 通过 Scannerinput
LocalDateTime via Scannerinput
我需要从 Scanner
插入一个 LocalDateTime
。
我们需要使用输入格式
dd.MM. HH:mm
对于Scanner
(不使用额外变量!),如何将这些扫描值放入起始变量?
Scanner sc = new Scanner(System.in);
System.out.println("Year:");
int year = sc.nextInt();
System.out.println("Start:");
//--- (?) scan something like dd.MM. HH:mm ---
start = LocalDateTime.of(year, month, dayOfMonth, hour, minute)
如果扫描的输入不是 dd.MM. HH:mm
格式,程序应该抛出一个 IllegalArgumentException
。我知道它是如何工作的,只是让你知道我们不能使用 sc.next()
和 getsubstring()
:(
Scanner
允许您指定输入匹配的模式。如果匹配成功,您可以查询它。这是基本思路:
public class Example {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("Year:");
int year = sc.nextInt();
System.out.println("Date-time in format: dd.MM. HH:mm");
sc.nextLine();
sc.findInLine("(\d\d)\.(\d\d)\. (\d\d):(\d\d)");
try {
MatchResult mr = sc.match();
int month = Integer.parseInt(mr.group(2));
int day = Integer.parseInt(mr.group(1));
int hour = Integer.parseInt(mr.group(3));
int minute = Integer.parseInt(mr.group(4));
LocalDateTime dt = LocalDateTime.of(year, month, day, hour, minute);
System.out.println(dt);
} catch (IllegalStateException e) {
System.err.println("Invalid date-time format.");
}
}
}
如果你想要更花哨的东西,你可以使用命名组而不是引用数字。您还可以在输入上添加额外的约束,以便它成为合法的日期时间格式,但 LocalDateTime.of
无论如何都会处理这个问题,这让我想到了...
关于异常处理的注意事项: 在这种情况下,如果模式不匹配,则根据请求抛出 IllegalStateException
。但是,如果以(有效)格式给出的数字没有意义,例如 90
表示月份,LocalDateTime.of
将抛出相同的异常。您可能希望单独捕获 DateTimeException
。
我需要从 Scanner
插入一个 LocalDateTime
。
我们需要使用输入格式
dd.MM. HH:mm
对于Scanner
(不使用额外变量!),如何将这些扫描值放入起始变量?
Scanner sc = new Scanner(System.in);
System.out.println("Year:");
int year = sc.nextInt();
System.out.println("Start:");
//--- (?) scan something like dd.MM. HH:mm ---
start = LocalDateTime.of(year, month, dayOfMonth, hour, minute)
如果扫描的输入不是 dd.MM. HH:mm
格式,程序应该抛出一个 IllegalArgumentException
。我知道它是如何工作的,只是让你知道我们不能使用 sc.next()
和 getsubstring()
:(
Scanner
允许您指定输入匹配的模式。如果匹配成功,您可以查询它。这是基本思路:
public class Example {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("Year:");
int year = sc.nextInt();
System.out.println("Date-time in format: dd.MM. HH:mm");
sc.nextLine();
sc.findInLine("(\d\d)\.(\d\d)\. (\d\d):(\d\d)");
try {
MatchResult mr = sc.match();
int month = Integer.parseInt(mr.group(2));
int day = Integer.parseInt(mr.group(1));
int hour = Integer.parseInt(mr.group(3));
int minute = Integer.parseInt(mr.group(4));
LocalDateTime dt = LocalDateTime.of(year, month, day, hour, minute);
System.out.println(dt);
} catch (IllegalStateException e) {
System.err.println("Invalid date-time format.");
}
}
}
如果你想要更花哨的东西,你可以使用命名组而不是引用数字。您还可以在输入上添加额外的约束,以便它成为合法的日期时间格式,但 LocalDateTime.of
无论如何都会处理这个问题,这让我想到了...
关于异常处理的注意事项: 在这种情况下,如果模式不匹配,则根据请求抛出 IllegalStateException
。但是,如果以(有效)格式给出的数字没有意义,例如 90
表示月份,LocalDateTime.of
将抛出相同的异常。您可能希望单独捕获 DateTimeException
。