首页 文章

Apache POI事件用户模型将Timestamp值读取为double

提问于
浏览
3

我有一个excel文件,其中有一个时间戳列填充值5/31/2011 5:49:44 PM我正在使用POI事件模型读取此excel文件 . (实现与http://poi.apache.org/spreadsheet/how-to.html#sxssf - "XSSF and SAX (Event API)"中解释的相同)上面的时间戳值读作40694.74287037037,我不知道为什么 . 我无法将此值格式化为日期时间格式 .

我该如何解决这个问题?

2 回答

  • 0

    这完全符合预期 . Microsoft Excel文件格式将所有日期时间存储为自1900/01/01或1904/01/01以来的小数日期,具体取决于文件中设置的标志(1904日期窗口标志) . 因此,当您读回原始值时,1900年1月1日下午6点应该返回 1.75 .

    如果您使用的是UserModel代码,则可以使用大量帮助程序将其重新转换为日期 . 在事件模型中,您必须自己发现(通过检查格式),然后自己调用转换 .

    你想要的课程是DateUtil,特别是像DateUtil.getJavaDate(double)这样的方法

    Apache POI提供了许多像这样的事情的例子,我建议你查看像XLS2CSVmra这样的指南 .

    此外,如果您想要的只是时间,而不考虑当天,则取非整数余数,这是一天中的一小部分时间 . 对于当前时间(向下舍入),您可以执行以下操作:

    double date = cell.getNumericCellValue(); // 1.76
    double time = date - ((int)date);
    int hours = time * 24; // 18
    
  • 1

    我使用了@Gagravarr建议的DateUtil.getJavaDate(double)解决方案 . 我只是保留了一个额外的检查,以防有人以String格式保存日期并且POI读取相同的内容 . 它工作得很完美 . 谢谢大家提出的宝贵建议 .

相关问题