为了账号安全,请及时绑定邮箱和手机立即绑定

XSSFCell -> 如何从 long 中获取间隔时间值

XSSFCell -> 如何从 long 中获取间隔时间值

白衣非少年 2023-12-21 10:40:59
我得到一个长值,例如:44304000。该值表示时间间隔。如果我们将此值转换为小时和分钟,我们会得到:12:18。我的问题在这里:当我想查看我的时间间隔值时,如何将单元格值添加到 XSSFCell 中?(不是文本)时间 - 可以通过 Excel 计算,文本 - 不能!谢谢帮助:)
查看完整描述

1 回答

?
繁华开满天机

TA贡献1816条经验 获得超4个赞

我怀疑你的时间间隔 44304000 是一个时间差,单位是毫秒。

Excel日期时间中,值存储为以double天为测量单位的浮点 ( ) 值。第 0 天 = 1900 年 1 月 1 日 00:00:00.000。因此,Excel日期时间值 1.0 表示一天。一小时是 1/24。一分钟是 1/24/60。一秒是 1/24/60/60。一毫秒是 1/24/60/60/1000。

知道了这一点,你就可以计算

double excelTimeIntervalInDays = timeIntervalInMillis/24d/60d/60d/1000d;

可以将其double excelTimeIntervalInDays设置为 中的单元格值Excel

另外,必须在单元格的单元格样式中设置适当的数字格式(日期格式),以便该double值将显示为时间。数字格式[hh]:mm:ss.000表示:显示两位数小时,即使超过 24(括号设置)。然后显示:. 然后显示两位数分钟。然后显示:. 然后显示两位数秒。然后显示.. 然后显示三位数毫秒。

完整示例:

import java.io.FileOutputStream;

import org.apache.poi.ss.usermodel.*;

import org.apache.poi.xssf.usermodel.XSSFWorkbook;


class CreateExcelDateTimeFromLong {


 public static void main(String[] args) throws Exception {


  try (Workbook workbook = new XSSFWorkbook(); 

       FileOutputStream fileout = new FileOutputStream("Excel.xlsx") ) {


   long[] timeIntervalsInMillis = new long[] {

    44304000, //12:18:24.000 = 12h, 18m, 24s

    20*60*60*1000+15*60*1000+10*1000, //20:15:10.000 = 20h, 15m, 10s

    25*60*60*1000+25*60*1000+15*1000, //25:25:15.000 = 25h, 25m, 15s = 1d, 1h, 25m, 15s

    48*60*60*1000+45*60*1000+55*1000, //48:45:55.000 = 48h, 45m, 55s = 2d, 0h, 45m, 55s

   };


   CellStyle timeIntervalStyle = workbook.createCellStyle();

   DataFormat format = workbook.createDataFormat();

   timeIntervalStyle.setDataFormat(format.getFormat("[hh]:mm:ss.000"));


   Sheet sheet = workbook.createSheet();

   Row row = sheet.createRow(0);

   Cell cell = row.createCell(0);

   cell.setCellValue("Time intervals");


   int r = 1;

   for (long timeIntervalInMillis : timeIntervalsInMillis) {

    row = sheet.createRow(r++);

    cell = row.createCell(0);


    double excelTimeIntervalInDays = timeIntervalInMillis/24d/60d/60d/1000d;


    cell.setCellValue(excelTimeIntervalInDays);

    cell.setCellStyle(timeIntervalStyle);

   }


   sheet.setColumnWidth(0,15*256);


   workbook.write(fileout);

  }


 }

}

注意:这假设它们timeIntervalsInMillis是指两个日期之间的差异(以毫秒为单位)。不要将其与以毫秒为单位的时间戳混淆。如果给出时间戳,则需要一种完全不同的方法,因为必须考虑这些时间戳的纪元。然后首先必须根据该时间戳创建日期,并且这些日期必须设置为 中的单元格值Excel。


查看完整回答
反对 回复 2023-12-21
  • 1 回答
  • 0 关注
  • 113 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信