java读取Excel中的日期时间处理

有时候,我们需要对Excel进行读取,如果是一般的文本数据还比较容易处理,最让人头疼的是一些特殊的数据,比如说日期数据,这时候就需要一些技巧了。 如果是通过jxl工具类来进行读取的话,还是比较容易处理的,读取到的数据都是String类型的数据,然后进行处理就可以了,不过需要注意的是:如果你对Excel的某一列或者若干列进行了单元格格式的设置,这时候jxl读取的行数,可能就不正确了,还有一点,jxl只支持2007及以前的Excel版本,2010及以后的好像就不支持了。
如果你是通过POI进行读取的话,这个时候,日期数据就会让人很头疼了,我是通过注解加反射获取每一个单元格里面的数据的,下面通过代码说一下如果解决日期格式的处理:

if ("class java.lang.String".equals(xclass)) {
    if (cell.getCellTypeEnum() == CellType.STRING) {
        setMethod.invoke(tObject, cell.getStringCellValue());
    } else if (cell.getCellTypeEnum() == CellType.NUMERIC) {
        // 判断参数类型
        if(HSSFDateUtil.isCellDateFormatted(cell)){
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
            setMethod.invoke(tObject, sdf.format(HSSFDateUtil.getJavaDate(cell.getNumericCellValue())));
        }else {
            setMethod.invoke(tObject, df.format(cell.getNumericCellValue()));
        }
    }
}

其中cell就是代表着单元格里面的值,最外层的if判断是判断你读取的到的数据是什么类型的数据,有的日期读取到的可能是java中的String类型的数据,第二层if是判断Excel中字符串的类型,是标准的字符串类型还是NUMERIC类型的字符串,NUMERIC表示的是纯数字的字符串,这个时候如果不再进一步判断的话,你读到的日期数据就有可能变成距离1990年1月1日的天数了。所以就有了第三层的if判断,如果是日期格式的字符串,就用HSSFDateUtil.getJavaDate获取,如果是普通数字的字符串,就直接获取就可以了。

你可能感兴趣的:(java技术)