POI读取EXCEL日期的有关问题
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对替换好的字符串进行变换.转换失败就
现在有份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; }