转到正文

浪淘沙

静观己心,厚积薄发

存档

标签: excel

今天发现一问题,java读取excel的时候 ,再处理时间格式数据的时候不是很一致。比如有的会解析成2012/01/02 12:00:00 (excel单元格格式为:yyyy-mm-dd HH:mm:ss 单元格内容为:2012-01-02 00:00:00),

而有些会解析为:11/13/12 0:00(excel单元格格式为:yyyy-m-d H:mm 单元格内容为:2012-11-13 0:00:00)。为了使所有的时间数据都能解析成统一的格式。对原来的java代码进行的处理。对日期格式的数据进行特别的处理。

再解析数据的时候 先判断excel的数据是否CellType为DATE


public static String[][] parseXls(String filePath, int sheetNum) throws IOException, BiffException {
    //通过Workbook的静态方法getWorkbook选取Excel文件
    Workbook workbook = Workbook.getWorkbook(new File(filePath));
    //通过Workbook的getSheet方法选择第一个工作簿(从0开始)
    Sheet sheet = workbook.getSheet(sheetNum);
    int rows = sheet.getRows();
    int cols = sheet.getColumns();
    Cell cells[][] = new Cell[cols][rows];

    String[][] finalContents = new String[rows][cols];
    for (int i = 0; i < cols; i++) {
        for (int j = 0; j < rows; j++) {
             cells[i][j] = sheet.getCell(i, j);
             if (cells[i][j].getType() == CellType.DATE) {//对日期数据进行特殊处理,如果不处理的话 默认24h制会变成12小时制
                 finalContents[j][i] = TotemConfigParseJFrame.formatTime(sheet.getCell(i, j));
             } else {
                 finalContents[j][i] = sheet.getCell(i, j).getContents();
             }
       }
    }
}

public static String formatTime(Cell formatCell) {
    java.util.Date date = null;
    DateCell dateCell = (DateCell) formatCell;
    date = dateCell.getDate();
    long time = (date.getTime() / 1000) - 60 * 60 * 8;
    date.setTime(time * 1000);
    SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    return formatter.format(date);

}

//或者 formatTime 的实现方式也可以修改为 @see http://www.andykhan.com/jexcelapi/tutorial.html#dates

public static String formatTime(Cell formatCell) {
    java.util.Date date = null;
    DateCell dateCell = (DateCell) formatCell;
    date = dateCell.getDate();
    TimeZone gmtZone = TimeZone.getTimeZone("GMT");
    SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    formatter.setTimeZone(gmtZone);
    System.out.println(formatter.format(date));
    return formatter.format(date);

}

24小时制时间显示:
public class Datetime {

    public static void main(String args[]){
        java.util.Date current=new java.util.Date();
        java.text.SimpleDateFormat sdf=new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String c=sdf.format(current);
        System.out.println(c);
   }
}

12小时制时间显示:


public class Datetime {

    public static void main(String args[]){
        java.util.Date current=new java.util.Date();
        java.text.SimpleDateFormat sdf=new java.text.SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
        String c=sdf.format(current);
        System.out.println(c);
    }
}

两者区别:yyyy-MM-dd HH:mm:ss ; yyyy-MM-dd hh:mm:ss

如下:

字母 日期或时间元素 表示 示例
G Era 标志符 Text AD
y Year 1996; 96
M 年中的月份 Month July; Jul; 07
w 年中的周数 Number 27
W 月份中的周数 Number 2
D 年中的天数 Number 189
d 月份中的天数 Number 10
F 月份中的星期 Number 2
E 星期中的天数 Text Tuesday; Tue
a Am/pm 标记 Text PM
H 一天中的小时数(0-23) Number 0
k 一天中的小时数(1-24) Number 24
K am/pm 中的小时数(0-11) Number 0
h am/pm 中的小时数(1-12) Number 12
m 小时中的分钟数 Number 30
s 分钟中的秒数 Number 55
S 毫秒数 Number 978
z 时区 General time zone Pacific Standard Time; PST; GMT-08:00
Z 时区 RFC 822 time zone -0800