我正在使用poi jar从excel表中读取,其中有一个日期列。如果我打印出数据的值cloumn:
cell.getDateCellValue()
它给我的价值就像3124.0
所以我尝试使用此代码转换为mm / dd / yyyy格式:
SimpleDateFormat sdf = new SimpleDateFormat("MM/DD/YYYY");
String s = sdf.format(cell.getDateCellValue());
System.out.println(s);
但是为了阅读06/30/2001的日期,我得到了这个值作为输出:
06/181/2001
答案 0 :(得分:3)
首先检查您的日期格式
SimpleDateFormat sdf = new SimpleDateFormat("MM/DD/YYYY");
应该是
SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy");
并检查POI API有关处理excel日期的更多信息,有更好的方法来处理日期。
检查HSSFDateUtil.isCellDateFormatted(),getExcelDate,getJavaDate
<强> getJavaDate 强>
public static java.util.Date getJavaDate(double date)
给定使用1900日期窗口的Excel日期,并将其转换为java.util.Date。
注意:如果Java中的默认TimeZone使用夏令时,那么转换回Excel日期可能不会给出相同的值,即比较excelDate == getExcelDate(getJavaDate(excelDate,false))并不总是如此。例如,如果默认时区是欧洲/哥本哈根,则在2004-03-28,欧洲中部时间01:59之后的分钟是03:00 CEST,如果excel日期表示02:00到03:00之间的时间则转换为过去夏天时间03:00 参数:
日期 - Excel日期。 返回: 日期的Java表示形式,如果日期不是有效的Excel日期,则为null
参见: 时区
答案 1 :(得分:3)
您的日期格式字符串错误。应该像下面的
SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy");
的Java文档
答案 2 :(得分:2)
查看java.text.SimpleDateFormat
的JavaDoc:
D
是一年中的一天
Y
适用于一年中的一周。
您可能希望在{月d
天和y
年使用小写变体
答案 3 :(得分:2)
您希望将"MM/dd/yyyy"
写为日期格式。资本DD
表示一年中的一天,6月30日为181。
答案 4 :(得分:0)
日期实际上以数字形式存储在单元格中。
CellType cellType = cell.getCellType();
if (cellType == CellType.NUMERIC) {
double numberValue = cell.getNumericCellValue();
if (DateUtil.isCellDateFormatted(cell)) {
Date javaDate= DateUtil.getJavaDate(numberValue);
//use DateFormat or as it is
myObj.setValueFromCell(javaDate);
} else {
// Use BigDecimal to avoid Scientific numbers like 1.2345678E9
String stringCellValue = BigDecimal.valueOf(numberValue).toPlainString();
myObj.setValue(stringCellValue);
}
}