XSSFCell -> 如何从 long 获取间隔时间值
XSSFCell -> how to get interval time value from long
我得到了一个很长的值,例如:44304000。该值表示时间间隔。
如果我们将此值转换为小时和分钟,我们将得到:12:18。
我的问题在这里:
当我想查看我的值作为时间间隔时,如何将单元格值添加到 XSSFCell 中? (不是文本)
时间 - 可以通过 excel 计算,文本 - 不是!
谢谢帮助:)
我怀疑你的时间间隔44304000是时差,单位是毫秒。
在 Excel
中,日期时间值以天为计量单位存储为浮点 (double
) 值。第 0 天 = 1/1/1900 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
.
中的单元格值
我得到了一个很长的值,例如:44304000。该值表示时间间隔。 如果我们将此值转换为小时和分钟,我们将得到:12:18。 我的问题在这里:
当我想查看我的值作为时间间隔时,如何将单元格值添加到 XSSFCell 中? (不是文本)
时间 - 可以通过 excel 计算,文本 - 不是!
谢谢帮助:)
我怀疑你的时间间隔44304000是时差,单位是毫秒。
在 Excel
中,日期时间值以天为计量单位存储为浮点 (double
) 值。第 0 天 = 1/1/1900 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
.