我在String
中以Java
的身份输入用户的时间,然后将其转换为LocalDateTime
对象并将其保存在文本文件中。
问题
hh:mm a
是我接受用户输入的格式。如果我输入12:30 PM
,它将被保存在文本文件中,当前日期为2019-03-20T12:30
,而不显示AM
或PM
。
因此,当我从文本文件中读取它时,我得到的日期时间信息中没有AM
或PM
。
问题
为什么AM
或PM
未保存在文本文件中,如何从LocalDateTime
实例中获取它?
代码
以下方法从用户处获取输入,将用户输入转换为LocalDateTime
实例,然后将其返回,然后以String
的形式保存到文本文件中
private static LocalDateTime getTimeInput(String question) {
System.out.print(question);
String userInput = scanner.nextLine();
userInput = AppointmentManager.validateTimeString(userInput, question);
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd h:m a");
String todaysDateString = LocalDate.now().toString();
userInput = todaysDateString + " " + userInput;
return LocalDateTime.parse(userInput, formatter);
}
validateTimeString
功能用于验证用户输入的格式正确
以下方法将数据保存到文本文件
private static final File file = new File("appointments_data.txt");
public static void saveAppointmentInfo(Appointment appointment, boolean appendToFile) {
try (FileWriter fw = new FileWriter(file, appendToFile);
BufferedWriter bfw = new BufferedWriter(fw)) {
String str = AppointmentDataManager.getAppointmentInfoAsString(appointment);
bfw.write(str);
bfw.newLine();
} catch (IOException ex) {
ex.printStackTrace();
}
}
getAppointmentInfoAsString
方法
private static String getAppointmentInfoAsString(Appointment appointment) {
StringBuilder sb = new StringBuilder();
sb.append(appointment.getPatientId())
.append(";")
.append(appointment.getStartTime())
.append(";")
.append(appointment.getEndTime())
.append(";")
.append(appointment.getDoctor().getName());
return sb.toString();
}
答案 0 :(得分:2)
在使用StringBuilder
时,您将在附加LocalDateTime.toString()
段时调用String
。按照LocalDateTime.toString()
方法javadoc:
输出将是以下ISO-8601格式之一:
- uuuu-MM-dd'T'HH:mm
- uuuu-MM-dd'T'HH:mm:ss
- uuuu-MM-dd'T'HH:mm:ss.SSS
- uuuu-MM-dd'T'HH:mm:ss.SSSSSS
- uuuu-MM-dd'T'HH:mm:ss.SSSSSSSSS
您需要使用自定义格式保存LocalDateTime
才能获得AM / PM:
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd h:m a");
sb.append(appointment.getPatientId())
.append(";")
.append(appointment.getStartTime().format(formatter))
.append(";")
.append(appointment.getEndTime().format(formatter))
.append(";")
.append(appointment.getDoctor().getName());
答案 1 :(得分:0)
看一个简单的例子。一致地应用它。
public static void main(String[] args) {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("KK:mm:ss a", Locale.ENGLISH);
String now = LocalDateTime.now().format(formatter);
System.out.println(now);
}
这仅适用于Java 1.8及更高版本。
符号含义类型示例
上午/下午标记文本PM
K Hour in am / pm(0-11)Number 0