如何从字符串中解析时间? [重复]

问题描述 投票:0回答:1

我正在尝试使用扫描器将字符串(11:23)解析为LocalDateTime,但是我收到了异常:无法解析文本'11:23':无法从TemporalAccessor:{}获得LocalDateTime,ISO已解析为java.time.format.Parsed类型的11:23

 Scanner scanner = new Scanner(System.in);
 String timeGivenByUserString;
 DateTimeFormatter timeFormatter = DateTimeFormatter.ofPattern("HH:mm");

  System.out.println("Type the time HH:mm");
        try {

            do {
                timeGivenByUserString = scanner.nextLine();
            } while (!timeGivenByUserString.matches("\\d{2}:\\d{2}"));
            LocalDateTime timeGivenByUser = LocalDateTime.parse(timeGivenByUserString, timeFormatter);
            System.out.println(timeGivenByUser.format(timeFormatter));

        } catch (DateTimeParseException e) {
            System.out.println(e.getMessage());
        }



我也创建了类似的方法,并且效果很好:


    private static void askAboutDate() {
        Scanner scanner = new Scanner(System.in);
        String dateGivenByUserString;
        DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("dd.MM.yyyy");

        System.out.println("Type the date dd.MM.yyyy");
        try {

            do {
                dateGivenByUserString = scanner.nextLine();
            } while (!dateGivenByUserString.matches("\\d{2}.\\d{2}.\\d{4}"));
            LocalDate dateGivenByUser = LocalDate.parse(dateGivenByUserString, dateFormatter);
            System.out.println(dateGivenByUser.format(dateFormatter));

        } catch (DateTimeParseException e) {
            System.out.println(e.getMessage());
        }
    }
java parsing time localtime
1个回答
2
投票

解决方案:将LocalDateTime更改为LocalTime

  Scanner scanner = new Scanner(System.in);
        String timeGivenByUserString;
        DateTimeFormatter timeFormatter = DateTimeFormatter.ofPattern("HH:mm");

        System.out.println("Type the time HH:mm");
        try {

            do {
                timeGivenByUserString = scanner.nextLine();
            } while (!timeGivenByUserString.matches("\\d{2}:\\d{2}"));
            LocalTime timeGivenByUser = LocalTime.parse(timeGivenByUserString, timeFormatter);
            System.out.println(timeGivenByUser.format(timeFormatter));

        } catch (DateTimeParseException e) {
            System.out.println(e.getMessage());
        }
© www.soinside.com 2019 - 2024. All rights reserved.