通过使用POI,我得到了字符串数字格式的日期。 例如:对于日期“10/15/2012”,我将“41197”作为字符串。 但我需要的是“10/15/2012”作为字符串。 我是否可以使用任何现有方法进行从“41197”到“10/15/2012”的转换。
答案 0 :(得分:1)
该数字似乎是epoch以来的天数。但哪个时代?
POI是用于处理Microsoft Office文档的库。不幸的是,不同的Microsoft产品团队使用了不同的时代。
January 0, 1900
Microsoft Excel January 1, 1904
Microsoft Excel January 1, 1
Microsoft .Net December 30, 1899
Microsoft COM 为了进一步混淆事情,Apache POI的文档DateUtil
absoluteDay
讨论了1900/12/31
。
请注意,Microsoft Excel会观察1900年2月29日的虚构日期。
探索DateUtil
类,了解Excel编号,Java Date
和字符串之间的转换方法。
以下是一些使用Joda-Time 2.7库来试验不同时期的代码,因此我们可能会猜测哪个时期符合您的预期结果。
尝试这3个时代。
LocalDate epoch_1900_01_00 = new LocalDate( 1900, 1, 1 ).minusDays(1);
LocalDate epoch_1904_01_01 = new LocalDate( 1904, 1, 1 );
LocalDate epoch_1900_12_31 = new LocalDate( 1900, 12, 31 );
int countDays = 41197;
计算结果。
System.out.println (epoch_1900_01_00 + " + " + countDays + " days = " + epoch_1900_01_00.plusDays ( countDays ) );
System.out.println (epoch_1904_01_01 + " + " + countDays + " days = " + epoch_1904_01_01.plusDays ( countDays ) );
System.out.println (epoch_1900_12_31 + " + " + countDays + " days = " + epoch_1900_12_31.plusDays ( countDays ) );
跑步时。
1899-12-31 + 41197 days = 2012-10-16
1904-01-01 + 41197 days = 2016-10-16
1900-12-31 + 41197 days = 2013-10-16
如果我们为虚构的闰日减去一个,那么1899-12-31
(或January 0, 1900
)的第一个时期会使您的预期值达到2012-10-15。
答案 1 :(得分:0)
如果您的单元格返回数字数据,则可以按日期转换它们
试试这个
if(cell.getCellType()==Cell.CELL_TYPE_NUMERIC){
if (DateUtil.isCellDateFormatted(cell)) {
System.out.println(cell.getDateCellValue());
} else {
System.out.println(cell.getNumericCellValue());
}
}