一行中来自 Scanner 的 Java 输入日期

标签 java java.util.scanner gregorian-calendar

我正在尝试从用户那里读取日期以传递给 GregorianCalendar 变量。目前我有一个尴尬的设置,它逐行读取。您能提供一种在一行中收集输入的解决方案吗?我找到了 SimpleDateFormat 类,但找不到适合此特定用途的类。

    Scanner time = new Scanner(System.in)

    System.out.println("Type year: ");int y =time.nextInt();
    System.out.println("Type month: ");int m =time.nextInt();
    System.out.println("Type day: ");int d = time.nextInt();
    System.out.println("Type hour: ");int h = time.nextInt();
    System.out.println("Type minute: ");int mm = time.nextInt();

    GregorianCalendar data = new GregorianCalendar(y,m,d,h,mm);

最佳答案

我建议您读入一行具有特定格式的文本,然后使用 DateFormat 对其进行解析。例如:

DateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm",
                                         Locale.US);
System.out.println("Enter date and time in the format yyyy-MM-ddTHH:mm");
System.out.println("For example, it is now " + format.format(new Date()));
Date date = null;
while (date == null) {
    String line = scanner.nextLine();
    try {
        date = format.parse(line);
    } catch (ParseException e) {
        System.out.println("Sorry, that's not valid. Please try again.");
    }
}

如果可以,请使用 Java 8 java.time 类,或 Joda Time - 具有相同的基本思想,但使用这些 API 中的类。两者都比使用 DateCalendar 好得多。

关于一行中来自 Scanner 的 Java 输入日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28385099/

相关文章:

java - 如何在 Java 中有效比较用户输入和多个输出场景

Java 控制台输入并打印 GregorianCalendar

java - 为什么其中一种方法适用于设置日期,而另一种方法则不行?

java - 将 Travis 和 Coverity 与 Github 上的 Java Gradle 项目连接起来

Java:使用 hasNextInt 和 do-while 循环,它会忽略偶数次的整数输入

java - 在 javac (JDK 9) 中混合 --class-path 和 --module-path

java - 想要从文件扫描的行中获取单独的标记。 java

c++ - boost::gregorian::date 没有 `set-type` 函数?

java - 尝试从 SQL 数据库检索数据到 listview android 时收到空指针异常

java - 将 TimeseriesChart 中的第二个时间序列转换为条形图