excel直接打开看到的日期格式和poi读取到的日期格式不一样

excel直接打开看到的日期格式和poi读取到的日期格式不一样

现象:

  1. 创建一个excel.xlsx文件,输入一个日期,将其格式选择为自定义类型 yyyy/m/d h:mm 并保存
  2. 可以看到,日期格式确实变成了类似于2021/1/10 1:15的样子
  3. 使用poi读取该文件,发现读取到的该单元格的数据为m/d/yy h:mm格式,并不是上面在excel中看到的yyyy/m/d h:mm格式。

poi版本 4.1.2
excel版本 2019
重现几率 100%

原因

  1. 解压缩上述excel文件,在sheet1.xml中可以找到对应的cell数据,在style.xml中找到cellXfs对应的样式,可以看到其 numFmtId=”22”
  2. 查看poi源码,找到BuiltinFormats类,查看其注释上有如下列表,可以看到22对应16进制0x16的时间样式为m/d/yy h:mm
  3. poi会使用22查找样式,这样找到的是m/d/yy h:mm,而不是我们设置的yyyy/m/d h:mm类型,这就解释了为啥poi读到的和我们看到的不一致了。

/**

  •   0, "General"<br>
    
  •   1, "0"<br>
    
  •   2, "0.00"<br>
    
  •   3, "#,##0"<br>
    
  •   4, "#,##0.00"<br>
    
  •   5, "$#,##0_);($#,##0)"<br>
    
  •   6, "$#,##0_);[Red]($#,##0)"<br>
    
  •   7, "$#,##0.00);($#,##0.00)"<br>
    
  •   8, "$#,##0.00_);[Red]($#,##0.00)"<br>
    
  •   9, "0%"<br>
    
  •   0xa, "0.00%"<br>
    
  •   0xb, "0.00E+00"<br>
    
  •   0xc, "# ?/?"<br>
    
  •   0xd, "# ??/??"<br>
    
  •   0xe, "m/d/yy"<br>
    
  •   0xf, "d-mmm-yy"<br>
    
  •   0x10, "d-mmm"<br>
    
  •   0x11, "mmm-yy"<br>
    
  •   0x12, "h:mm AM/PM"<br>
    
  •   0x13, "h:mm:ss AM/PM"<br>
    
  •   0x14, "h:mm"<br>
    
  •   0x15, "h:mm:ss"<br>
    
  •   0x16, "m/d/yy h:mm"<br>
    

*

  •   // 0x17 - 0x24 reserved for international and undocumented
    
  •   0x25, "#,##0_);(#,##0)"<br>
    
  •   0x26, "#,##0_);[Red](#,##0)"<br>
    
  •   0x27, "#,##0.00_);(#,##0.00)"<br>
    
  •   0x28, "#,##0.00_);[Red](#,##0.00)"<br>
    
  •   0x29, "_(* #,##0_);_(* (#,##0);_(* \"-\"_);_(@_)"<br>
    
  •   0x2a, "_($* #,##0_);_($* (#,##0);_($* \"-\"_);_(@_)"<br>
    
  •   0x2b, "_(* #,##0.00_);_(* (#,##0.00);_(* \"-\"??_);_(@_)"<br>
    
  •   0x2c, "_($* #,##0.00_);_($* (#,##0.00);_($* \"-\"??_);_(@_)"<br>
    
  •   0x2d, "mm:ss"<br>
    
  •   0x2e, "[h]:mm:ss"<br>
    
  •   0x2f, "mm:ss.0"<br>
    
  •   0x30, "##0.0E+0"<br>
    
  •   0x31, "@" - This is text format.<br>
    
  •   0x31  "text" - Alias for "@"<br>
    
  • */

猜测

猜测可能和国家地区有关,poi应该只对应美国地区,而excel在中国电脑上安装的,有本地化适配。


excel直接打开看到的日期格式和poi读取到的日期格式不一样
https://www.huangchaoyu.com/1160588511.html
作者
hcy
发布于
2021年10月12日
更新于
2024年8月17日
许可协议