我正在通过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
难以理解,还是我错过了什么?我还想过将单元格格式化为正确的日期格式 - 想法?
答案 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