gpt4 book ai didi

java - 用 apache poi 写旧日期

转载 作者:行者123 更新时间:2023-11-29 04:45:59 25 4
gpt4 key购买 nike

我正在使用 apache poi 3.14 创建一个 excel 文件,该文件必须包含不同类型的数据,包括日期。

我的代码在大多数情况下都能正常工作。在单元格中编写具体日期 (java.util.Date) 时,我遇到了问题。这是我的代码:

 Date date;

// code where I get the value of date

Cell currentCell = currentRow.createCell(fieldPos++);

// line below doesn't work for date like '11/11/1811' but work for '11/11/2111'
currentCell.setCellValue(date);

currentCell.setCellStyle(myDateStyle);

假设我有 3 个日期要写:

  • 2009 年 1 月 1 日
  • 11/11/2111
  • 11/11/1811

我的 excel 文件看起来像这样:

| 01/01/2009 | 2111 年 11 月 11 日 | 空白单元格 |

当日期等于 11/11/1811 时,currentCell.setCellValue(date) 行将值设置为 -1,因此在我的 excel 文件中它显示为空白(根据我的 dateStyle)

为什么它在特定日期不工作,我该如何解决?

最佳答案

找到原因了!

Apache Poi 的 setCellValue(Date d) 尝试将给定的 java.util.Date 转换为 excel“datenumber”:

Excel stores dates and times as a number representing the number of days since 1900-Jan-0, plus a fractional portion of a 24 hour day: ddddd.tttttt . This is called a serial date, or serial date-time.

这就是为什么当给定 1900 年之前的日期时,setCellValue 会将值设置为 -1,因为它无法进行转换操作。

修复了在 setCellValue(Date d) 设置为 -1 的情况下使用 Date.toString() 调用 setCellValue(String s) 的问题,唯一剩下的问题是我更改了数据。

关于java - 用 apache poi 写旧日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37182669/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com