我的价值很高,例如: 44304000 。该值指示时间间隔。 如果将这个值转换为小时和分钟,则会得到: 12:18 。 我的问题在这里:
当我想查看时间间隔的值时,如何将单元格值添加到XSSFCell? (不是文字)
时间-可以通过Excel计算,文本-不能!
寻求帮助:)
答案 0 :(得分:1)
我怀疑您的时间间隔44304000是一个时差,以毫秒为单位。
在Excel
中,日期时间值以天的计量单位存储为浮点(double
)值。第0天= 1/1/1900 00:00:00.000。因此,在Excel
中,日期时间值为1.0表示一天。 1小时为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
中将这些日期设置为单元格值。