Java解析Excel的时间遇到的问题

Excel里的时间常见的写法有三种,一种时2021/5/12,一种时2021-05-12,一种是20210512,第一种和第三种在Excel里是时间格式,第二种是常规格式,也就是字符串。
当我们使用java读取Excel时,读单元格数据时规定了一种类型一种方法,不同类型的数据用一种方法就会报错,可以先将单元格的数据统一转为字符串

row.getCell(rowNum).setCellType(XSSFCell.CELL_TYPE_STRING);

但是当日期为2021/5/12这种格式时,转换就出了问题,会转为一个五位数的字符串
在这里插入图片描述
这个数字表示的是从1899年12月30号开始到Excel表格里日期时间的天数,
所以在写一个工具类转换一下就好了

public class UtilDate {
	public static final String YYYYMMDD = "yyyyMMdd";
	public static final String HHmmss = "HHmmss";
	public static final Long ExcelBeginDate= 18991230L;
	
	
	public static Long getDateLong(Date date) {
        SimpleDateFormat sf = new SimpleDateFormat(YYYYMMDD);
        return Long.valueOf(sf.format(date));
    }
	/**
	 *
	 * @Title: Excel获取时间时得到数字,进行转化
	 * eg:44301 转为20210416
	 * */
	public static Long getNdaysLast( int day) throws ParseException {
		Date begin = getDate();
		// 得到日历
		Calendar calendar = Calendar.getInstance();
		calendar.setTime(begin);
		calendar.add(Calendar.DAY_OF_YEAR, +day);
		Date beforedays = calendar.getTime();
		return getDateLong(beforedays);
	}



	public static Date getDate() {

		try {
			return new SimpleDateFormat(YYYYMMDD).parse(String.valueOf(ExcelBeginDate));
		} catch (ParseException e) {
			e.printStackTrace();
			return null;
		}
	}
}
	

格式为2021-05-12这种的直接用String里的字符串替换方法
格式为20210512这种的直接用Integer里字符串转int方法

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值