扫描程序未正确将字符串存储为已分析的LocalDateTime



当我从扫描仪中获取字符串变量并将其解析为LocalDateTime时,格式为"yyyy-MM-dd HH:MM";扫描仪保存了没有时间的输入(即2020-10-12 14:30(。我相信时间正在被保存到下一个变量中。然而,如果我在没有空格的情况下输入2020-10-1214:30,它将正确保存变量。

下面是我的构造函数,在这里创建对象,并将字符串解析为localdatetime对象。

public computerbooking(String strDAte, String ReturnDate,String computerType,String AssetTag,String StudentId ){
counter++;
this.bookingId  = "Book"+counter;
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm");
bookingDateAndTime = bookingDateAndTime.parse(strDAte,formatter);
returnDateAndTime = returnDateAndTime.parse(ReturnDate,formatter);
this.computerType = computerType;
this.AssetTag = AssetTag;
this.StudentId = StudentId;
}

我如何指示扫描仪不要读取日期和时间之间的空格以正确保存

  1. LocalDateTime#parse是一个static函数。使用LocalDateTime.parse(strDate, formatter)而不是bookingDateAndTime.parse(strDAte,formatter)
  2. 使用Scanner#nextLine扫描输入的整行。如果使用Scanner#next,它将只扫描到2020-10-12,即一旦遇到2020-10-12之后的空白字符,它就会停止扫描

演示:

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Scanner;
class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("Enter date and time: ");
String strDate = scanner.nextLine();
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("uuuu-MM-dd HH:mm");
LocalDateTime bookingDateAndTime = LocalDateTime.parse(strDate, formatter);
System.out.println(bookingDateAndTime);
// A custom format
String formatted = bookingDateAndTime.format(DateTimeFormatter.ofPattern("MMM dd uuuu hh:mm a"));
System.out.println(formatted);
}
}

样本运行:

Enter date and time: 2020-10-12 14:30
2020-10-12T14:30
Oct 12 2020 02:30 pm

最新更新