从LocalDateTime实例获取AM / PM信息

时间:2019-03-20 14:28:52

标签: java date java-8

我在String中以Java的身份输入用户的时间,然后将其转换为LocalDateTime对象并将其保存在文本文件中。

问题

hh:mm a是我接受用户输入的格式。如果我输入12:30 PM,它将被保存在文本文件中,当前日期为2019-03-20T12:30,而不显示AMPM

因此,当我从文本文件中读取它时,我得到的日期时间信息中没有AMPM

问题

为什么AMPM未保存在文本文件中,如何从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 个答案:

答案 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