当前位置: 代码迷 >> J2SE >> POI读取EXCEL日期的有关问题
  详细解决方案

POI读取EXCEL日期的有关问题

热度:81   发布时间:2016-04-24 12:42:41.0
POI读取EXCEL日期的问题。
现在有份EXCEL表格,让很多人填写,在出生年月一列中,有人输入1970年2月,有人输入1970年2月3日,有人输入1970.02,有人输入1970.2,有人输入1970.02.03,有人输入1970-02,有人输入1970-2-3,还有人输入1970.2.3;
我在读取时,进行如下判断

switch(cell.getCellType()) {
  case HSSFCell.CELL_TYPE_NUMERIC:
  Birthday = String.valueOf(cell.getDateCellValue().toLocaleString);
  break;
  case HSSFCell.CELL_TYPE_STRING:
  Birthday = cell.getStringCellValue().trim();
  break;
  default:
  Birthday = "";
  break;
}

这样读取出的出生年月,如果填写的是1970年2月此种格式的,可以经过处理得到;但是如果填写的是1970.02这种格式的,读出的结果就不对了。

请教,有没有什么好的方法来解决??

------解决方案--------------------
我可以肯定地告诉楼主,poi不能处理这种情况,而且这个也不该poi负责处理,
可以先使用getRichStringCellValue得到全部字符串,然后使用自己的方法处理此字符串

自己的方法:
①把"年","月","日","-"等等统统替换为".",这样日期就统一为以"."分割了
②使用SimpleDateFormat对替换好的字符串进行变换.转换失败就
Java code
try{  按"yyyy.MM.dd"转换;  返回转换好的Date;}catch (Exception e){  //doNothing;}try{  按"yyyy.MM"转换;    返回转换好的Date;}catch(Exception e){  //doNothing;}......走到最后则说明是无法识别的格式,返回空串;(或者抛出异常==)
------解决方案--------------------
楼上正解.
------解决方案--------------------
统一用
cell.getStringCellValue().trim()取字符 


然后再调用以下方法转换格式

Java code
    /**     * @param args     */    public static void main(String[] args) {        // TODO Auto-generated method stub    String str = "1990.8.8";    //String str2 = "1990-9-4";    parseDate(str);    }        /****     * 日期String串转Date     * @param str     * @return     */        public static  Date parseDate(String str){        Date d = new Date();        if(str.indexOf('.')!=-1){             SimpleDateFormat sdf = new SimpleDateFormat("yyyy.MM.dd");             try {                 d = sdf.parse(str);                System.out.println(sdf.format(d));                            } catch (ParseException e) {                // TODO Auto-generated catch block                e.printStackTrace();            }                    }        if(str.indexOf('-')!=-1){             SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");             try {                 d = sdf.parse(str);                System.out.println(sdf.format(d));                            } catch (ParseException e) {                // TODO Auto-generated catch block                e.printStackTrace();            }                    }                return d;    }
  相关解决方案