Java 转换EXCEL Duble格式时间为指定格式日期字符串

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日期格式转换。

发布了27 篇原创文章 · 获赞 27 · 访问量 4278

猜你喜欢

转载自blog.csdn.net/qq_41788977/article/details/102752875