Получение информации AM / PM из экземпляра LocalDateTime - PullRequest
2 голосов
/ 20 марта 2019

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

Ответы [ 2 ]

2 голосов
/ 20 марта 2019

Когда вы используете StringBuilder, вы звоните LocalDateTime.toString(), когда добавляется сегмент String. Согласно LocalDateTime.toString() методу javadoc:

На выходе будет один из следующих форматов ISO-8601:

  • уууу-ММ-dd'T'HH: мм
  • уууу-MM-dd'T'HH: мм: сс
  • уууу-MM-dd'T'HH: мм: СС.ссс
  • уууу-MM-dd'T'HH: мм: ss.SSSSSS
  • уууу-MM-dd'T'HH: мм: 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());
0 голосов
/ 20 марта 2019

Взгляните на простой пример того, как это сделать.Примените его* K час в AM / PM (0-11) номер 0

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...