Я подозреваю, что ваш временной интервал 44304000 представляет собой разницу во времени и выражается в миллисекундах.
В Excel
значения даты и времени сохраняются как значения с плавающей запятой (double
) в единицах измерения дней. День 0 = 01.01.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
.