格式化Excel工作表中的日期

时间:2016-02-14 16:03:00

标签: java excel

我正在通过Apache POI从我的Java程序中的Excel工作表中读取日期列,返回字符串Fri Jan 16 00:00:00 EST 2015。我需要将此字符串格式化为01/16/2016

我尝试使用SimpleDateFormat将字符串解析为Date对象,然后返回到我需要的格式化String

String inputDate = excelData.get(20).toString(); // Returns Fri Jan 16 00:00:00 EST 201
Date date = new SimpleDateFormat("MM/dd/yyyy").parse(inputDate);
String outputDate = new SimpleDateFormat("MM/dd/yyyy").format(date);

但是,在尝试解析inputDate

时会返回以下内容
Unparseable date: "Fri Jan 16 00:00:00 EST 2015"

我的inputDate难以理解,还是我错过了什么?我还想过将单元格格式化为正确的日期格式 - 想法?

3 个答案:

答案 0 :(得分:1)

你的问题就在这一行:

Date date = new SimpleDateFormat(**"MM/dd/yyyy"**).parse(inputDate);

您描述的日期格式更像是: “DDD MMM DD HH:mm:ss tz yyyy”或类似的东西。

使用https://docs.oracle.com/javase/8/docs/api/java/text/SimpleDateFormat.html查找正确的格式化程序以便阅读日期。

输出看起来很好,因为您可以将输入字符串格式作为正确的格式读入日期。

答案 1 :(得分:1)

您的代码告诉SimpleDateFormat使用MM/dd/yyyy格式PARSE日期,所以当然它不起作用,因为这不是您获得的字符串的格式。

https://poi.apache.org/faq.html#faq-N1008D上的POI常见问题解答提供了一段代码来阅读日期:

case HSSFCell.CELL_TYPE_NUMERIC:
     double d = cell.getNumericCellValue();
     // test if a date!
     if (HSSFDateUtil.isCellDateFormatted(cell)) {
       // format in form of M/D/YY
       cal.setTime(HSSFDateUtil.getJavaDate(d));
       cellText =
         (String.valueOf(cal.get(Calendar.YEAR))).substring(2);
       cellText = cal.get(Calendar.MONTH)+1 + "/" +
                  cal.get(Calendar.DAY_OF_MONTH) + "/" +
                  cellText;
     }

你试过吗?

答案 2 :(得分:1)

更改

Date date = new SimpleDateFormat("MM/dd/yyyy").parse(inputDate);

Date date = new SimpleDateFormat("EEE MMM DD HH:mm:ss zzz yyyy").parse(inputDate);
zzz   Time zone              EST
EEE   Day name in week       Tuesday
MMM   Month in year          July

参考: SimpleDateFormat doc