java - 从 LocalDateTime 实例获取 AM/PM 信息

标签 java date java-8

我正在将用户输入的时间作为Java中的String,然后将其转换为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();
}

最佳答案

当您使用StringBuilder时,您将在附加String段时调用LocalDateTime.toString()。根据 LocalDateTime.toString() 方法 javadoc:

The output will be one of the following ISO-8601 formats:

  • 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());

关于java - 从 LocalDateTime 实例获取 AM/PM 信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55263190/

相关文章:

java - Android - 创建一个每天运行一次的服务

java - 使用 Quartz 只运行一次作业

PHP date() - 插入 MySQL 数据库

java - 什么将参数传递给类似 ...(myClass.FINALOBJECT) 的方法?

java - J工作台高度计算

java - 在 gradle 中定义 javah 任务的最佳方式

ruby-on-rails - ruby 日期方程不返回预期的真值

javascript - 管理没有时区的 moment.js 范围

java - 如何在 Java 8 中使用流将集合/数组转换为 JSONArray

java - 消费者构造函数陷阱