我使用以下代码
使用POI从Excel工作表中获取日期if (DateUtil.isCellDateFormatted(currentCell))
{
Date date = currentCell.getDateCellValue();
cellValue = date.getDate() + "/" + (date.getMonth() + 1) + "/" + (1900 + date.getYear());
}
默认情况下,Excel工作表的日期格式为MM / dd / yy。但如果我使月份值大于12(即> = 13),则格式将更改为dd / MM / yy。
根据上面的代码,如果我将日期定义为10/11/2010,它将月份作为10,将日期作为11。如果我像15/10/2010那样给出,我将月份作为10,将日期作为15。
但我需要保持一种格式为dd / MM / yyyy。我怎样才能做到这一点?
答案 0 :(得分:11)
使用SimpleDateFormat格式化日期,因为“currentCell.getDateCellValue()”返回日期。
if (DateUtil.isCellDateFormatted(currentCell))
{
try {
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
cellValue = = sdf.format(currentCell.getDateCellValue());
} catch (ParseException e) {
e.printStackTrace();
}
}
这应该可以防止正在进行的自动转换。
答案 1 :(得分:3)
您可以尝试使用org.apache.poi.ss.usermodel.DataFormatter - 假设您将Excel文件设置为将日期单元格格式化为dd / mm / yyyy,那么它应该能够渲染它你来自牢房。
// Get a date formatter, and ensure it does dd/mm/yyyy format
DataFormatter formatter = new DataFormatter(Locale.UK);
// Find date cells
for(Row r : sheet) {
for(Cell c: r) {
if(DateUtil.isCellDateFormatted(c)) {
String date = DataFormatter.formatCellValue(c);
// date should be the same as shown in Excel
}
}
}
或者,如果您的单元格被格式化为日期但格式不同,那么您有两种选择。一种是将单元格样式更改为dd / mm / yyyy格式,然后要求DataFormatter对其进行格式化,另一种是从DateUtil获取java.util.Date对象,然后使用SimpleDateFormat格式对其进行格式化,如其他人所建议的那样
答案 2 :(得分:0)
确保Excel中的字段本身在Excel中配置为DATE数据类型。那么Excel中的实际格式应该与POI读取它的方式无关。