Excel的日期存储类型为Double类型,是一个长度为5的数字,例如日期为2015-01-01,到处到xml或者数据库中就变成了42005
种种原因我们并不能再借助Excel来转化这个不直观的数据格式,于是这里我们只考虑已经是这种数据类型,怎样还原成自己想要的日期格式
一种现成的解决方案是使用org.apache.poi.ss.usermodel.DateUtil.getJavaDate(),来将double数值转换为java.util.Date类,再转换为字符串的日期格式,但一个得不偿失的问题是,如果你的系统中并没有用到POI框架的话,仅仅为了转换个日期格式是不值得的
这里仿照实现方法提供一个java方法
/**
* 转换Excel日期为指定格式日期字符串
* @param value 需要转换的值
* @param format 指定日期格式 yyyy-MM-dd HH:mm:ss
* @return 转换后的日期
*/
public static String conversionDoubleToDateStr(double value,String format){
boolean use1904windowing = false;
int wholeDays = (int)Math.floor(value);
int millisecondsInDay = (int)((value - (double)wholeDays) * 8.64E7D + 0.5D);
Calendar calendar = new GregorianCalendar();
short startYear = 1900;
byte dayAdjust = -1;
if (use1904windowing) {
startYear = 1904;
dayAdjust = 1;
}else if (wholeDays < 61) {
dayAdjust = 0;
}
calendar.set(startYear, 0, wholeDays + dayAdjust, 0, 0, 0);
calendar.set(Calendar.MILLISECOND, millisecondsInDay);
if(calendar.get(Calendar.MILLISECOND) == 0) {
calendar.clear(Calendar.MILLISECOND);
}
Date date = calendar.getTime();
SimpleDateFormat s = new SimpleDateFormat(format);
System.out.println(s.format(date));
return s.format(date);
}
测试是否满足需求
public static void main(String[] args) {
String datestr = conversionDoubleToDateStr(42005,"yyyy-MM-dd");
System.out.println(datestr);//2015-01-01
}
测试成功,不需要借助其他jar文件,即可实现Excel日期格式转换。