Я беру время от пользователя как 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();
}