java - 使用apache poi输入时间

标签 java time format apache-poi

我已经使用 Apahe POI 将时间输入到 Excel 文件中,如下所示

Time time = Time.valueOf("19:30:00");
CellStyle cellStyle1 = workbook.createCellStyle();
CreationHelper createHelper1 = workbook.getCreationHelper();
cellStyle1.setDataFormat(
        createHelper.createDataFormat().getFormat("HH:MM AM/PM"));
cell = row.getCell(1);
System.out.println(time.toString());
cell.setCellValue(time);
cell.setCellStyle(cellStyle1);

结果如预期的那样,但是发现了以下不匹配的情况 Excel 的实际值和显示值不同 - 我怎样才能使它们相同,我是否使用了错误的方法来更新 Excel 时间格式的值 Screenshot of output on Excel

最佳答案

Excel中,日期和时间存储为 float ,即自午夜01/01/1900以来的天数。

如果您要存储一些小于1.0的值 - 它将被解释为时间,否则解释为日期,例如:

  1. 0.5 将等于 12:00:00
  2. 5.5 将等于 05.01.1900 12:00:00

要正确处理日期和时间,请使用org.apache.poi.ss.usermodel.DateUtil,例如您的示例可能如下所示:

    double time = DateUtil.convertTime("19:30:00");
    CellStyle cellStyle = workbook.createCellStyle();
    cellStyle.setDataFormat(
            workbook.createDataFormat().getFormat("HH:MM AM/PM"));
    cell.setCellValue(time);
    cell.setCellStyle(cellStyle);

结果 Excel 将如下所示:

Excel time output

<小时/>

假设问题与上述内容有关,Excel 中的实际日期/时间值应该是 double 值,并且表示值应该基于您设置的样式/模式;假设目标是实现这种相似性,即公式中的 19:30:00 和单元格中的 07:30 PM

如果不是,并且目标是在这两种情况下都达到 07:30 PM - 那么您只需要存储一个字符串值,而不是日期/时间。

关于java - 使用apache poi输入时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52426370/

相关文章:

java - 将 Scala Option[java.sql.Timestamp] 与包含为 Option ["YYYY-mm-dd hh:mm:ss"的日期字符串进行比较]

javascript - 如何确定特定时间是否在javascript中的给定时间范围之间

python - python 2 函数在没有任何导入的情况下运行所需的时间;是否可以?

java - 将非 ISO 8601 解析为 ISO_INSTANT

c# - 带有 TryParseExact 的 FormatException

Linux bash - 输入格式

Java线程问题

java - 在同一个文件中序列化多个对象

java - 在集合中查找第一个缺失的数字

java - 动态以格式化表格式打印HashMap