将 excel 日期转换为 mm/dd/yyyy 格式
converting excel date into mm/dd/yyyy format
我正在使用 poi jar 从 excel sheet 中读取,其中有一个日期 column.If 我打印出数据 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
首先检查你的日期格式
SimpleDateFormat sdf = new SimpleDateFormat("MM/DD/YYYY");
应该是
SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy");
并检查 POI API 有关处理日期的更多信息 excel,有更好的方法来处理日期。
检查HSSFDateUtil.isCellDateFormatted(),获取Excel日期,获取Java日期
获取Java日期
public static java.util.Date getJavaDate(双日期)
给定一个使用 1900 日期窗口的 Excel 日期,并将其转换为 java.util.Date。
注意:如果 Java 中的默认时区使用夏令时,则转换回 Excel 日期可能不会给出相同的值,即比较 excel 日期== getExcelDate(getJavaDate(excelDate,false)) 并不总是正确的。例如,如果默认时区是 Europe/Copenhagen,则在 2004-03-28,01:59 CET 之后的分钟是 03:00 CEST,如果 excel 日期表示 [=45] 之间的时间=] 和 03:00 然后它被转换为过去的 03:00 夏令时
参数:
日期 - Excel 日期。
Returns:
Java 日期的表示,如果日期不是有效的 Excel 日期
,则为 null
另请参阅:
时区
另请参考Reading date values from excel cell using POI HSSF API
查看 java.text.SimpleDateFormat
的 JavaDoc:
D
代表一年中的第几天
Y
表示一年中的第几周。
您可能希望对 d
月中的日期和 y
年
使用小写变体
您的日期格式字符串有误。应该像下面
SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy");
阅读 Java 文档 SimpleDateFormat
你想写 "MM/dd/yyyy"
作为你的日期格式。大写 DD
表示一年中的第几天,6 月 30 日是 181。
日期实际存储为单元格中的数字。
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);
}
}
我正在使用 poi jar 从 excel sheet 中读取,其中有一个日期 column.If 我打印出数据 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
首先检查你的日期格式
SimpleDateFormat sdf = new SimpleDateFormat("MM/DD/YYYY");
应该是
SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy");
并检查 POI API 有关处理日期的更多信息 excel,有更好的方法来处理日期。
检查HSSFDateUtil.isCellDateFormatted(),获取Excel日期,获取Java日期
获取Java日期
public static java.util.Date getJavaDate(双日期)
给定一个使用 1900 日期窗口的 Excel 日期,并将其转换为 java.util.Date。
注意:如果 Java 中的默认时区使用夏令时,则转换回 Excel 日期可能不会给出相同的值,即比较 excel 日期== getExcelDate(getJavaDate(excelDate,false)) 并不总是正确的。例如,如果默认时区是 Europe/Copenhagen,则在 2004-03-28,01:59 CET 之后的分钟是 03:00 CEST,如果 excel 日期表示 [=45] 之间的时间=] 和 03:00 然后它被转换为过去的 03:00 夏令时 参数:
日期 - Excel 日期。 Returns: Java 日期的表示,如果日期不是有效的 Excel 日期
,则为 null另请参阅: 时区
另请参考Reading date values from excel cell using POI HSSF API
查看 java.text.SimpleDateFormat
的 JavaDoc:
D
代表一年中的第几天
Y
表示一年中的第几周。
您可能希望对 d
月中的日期和 y
年
您的日期格式字符串有误。应该像下面
SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy");
阅读 Java 文档 SimpleDateFormat
你想写 "MM/dd/yyyy"
作为你的日期格式。大写 DD
表示一年中的第几天,6 月 30 日是 181。
日期实际存储为单元格中的数字。
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);
}
}