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。
添加回答
舉報