在使用poi读取excel的时候,可能会遇到时间格式为498888.9999999这种无法格式化的问题,本文主要是为了记录对于这种格式的时间的处理方式,如果大家有不同的意见,欢迎大家,贡献自己的方法。
我们可以先分析一下这个时间串,一般这种时间串,小数点前边的一般都是年月日,小数点后边的都是时分秒,所以我们要分开处理,首先处理日期:
public static Date getDate(int days) { Calendar c = Calendar.getInstance(); c.set(1900, 0, 1); c.add(Calendar.DATE, days - 2); return c.getTime(); }
接下来我们要处理时分秒,让时分秒+日期格式化真正我们需要的日期。
public static Date getTime(Date date, double ditNumber) { Calendar c = Calendar.getInstance(); int mills = (int) (Math.round(ditNumber * 24 * 3600)); int hour = mills / 3600; int minute = (mills - hour * 3600) / 60; int second = mills - hour * 3600 - minute * 60; c.setTime(date); c.set(Calendar.HOUR_OF_DAY, hour); c.set(Calendar.MINUTE, minute); c.set(Calendar.SECOND, second); return c.getTime(); }
最后我们需要格式个传入的时间串,分别调用上边的两个方法,实现对日期的格式化:
public static Date formatExcelDate(String excelDate){ String dayStr = excelDate.substring(0,excelDate.lastIndexOf(".")); String numStr = "0"+excelDate.substring(excelDate.lastIndexOf("."),excelDate.length()); int days = Integer.parseInt(dayStr); double ditNumber = Double.parseDouble(numStr); Date date = getDate(days); Date dateTime = getTime(date, ditNumber); return dateTime; }