我正在尝试将输入字符串日期解析为 GregorianCalendar:
Scanner scan = new Scanner(System.in);
String next = scan.next("[0-9]{2}.[0-9]{2}.[0-9]{4} [0-9]{2}:[0-9]{2}");
scan.nextLine();
DateFormat df = new SimpleDateFormat("dd.MM.yyyy hh:mm");
Date date = null;
try {
date = df.parse(next);
} catch (ParseException e1) {
e1.printStackTrace();
}
GregorianCalendar cal = new GregorianCalendar();
cal.setTime(date);
System.out.println(cal.getTime());
但它一直给出这个错误:
java.util.InputMismatchException
at java.util.Scanner.throwFor(Unknown Source)
at java.util.Scanner.next(Unknown Source)
at java.util.Scanner.next(Unknown Source)
有人可以帮我吗?如果我不指定小时和分钟,这会起作用,但不是这样......
最佳答案
查看Scanner.next(Pattern)
的源码,由 Scanner.next(String)
调用,该方法大致遵循以下步骤:
使用分隔符模式跳过流中当前位置的所有分隔符。
搜索流中的下一个分隔符。如果需要更多输入来查找分隔符,则会阻止。如果流结束则继续
检查模式是否与当前位置和下一个分隔符(或流结尾)之间的标记相匹配。
如果匹配则返回 token 。否则,抛出异常。
由于空格与默认分隔符模式 ("\\p{javaWhitespace}+"
) 匹配,因此扫描程序在日期部分进行标记,并尝试将标记与模式进行匹配,但失败。
01.01.2014 00:00
^--------^^
token |
|
delimiter
一种方法是单独扫描它们:
String nextDate = scan.next("[0-9]{2}\\.[0-9]{2}\\.[0-9]{4}");
String nextTime = scan.next("[0-9]{2}:[0-9]{2}");
String next = nextDate + " " + nextTime;
在我看来,这是该问题最简单的解决方案,它避免了涉及分隔符模式。但我不知道这是否是最好的解决方案。
关于java - 将字符串格式的日期解析为公历,包含小时和分钟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27169447/