有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

我得到了一个长值,例如:44304000。此值表示时间间隔。 如果我们把这个值转换成小时和分钟,我们得到:12:18。 我的问题是:

当我想查看我的值作为时间间隔时,如何将单元格值添加到XSSFCell中?(不作为文本)

时间-可以通过excel计算,文本-不

Thx寻求帮助:)


共 (1) 个答案

  1. # 1 楼答案

    我怀疑您的时间间隔44304000是一个时差,以毫秒为单位

    Excel中,日期时间值存储为以天为度量单位的浮点(double)值。第0天=1900年1月1日00:00:00.000。因此在{}中,日期时间值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中的单元格值