Java Excel导出遇到的时间转换问题

1.需求是这样的

可以选择如上三种导入格式

2.java批量导入

我测试选择1、3和4方式,在Java直接get的时候会显示成数字如 第一种"44562"三四种大概都是"44555:12312312313123" 这种形式,但第二种直接get就会直接获得可以入库的标准 如"2022年1月1日 10点10分"

1)所以我们对症下药

问题背景:java中使用poi进行excel导入数据时,日期格式在数据库中存放为varchar2类型。
 
问题:存放数据日期读取数据为“44439”的数字,因判断格式类型为yyyy-mm-dd无法存放并提醒
 
解决办法:日期为“44439”的数字,无法使用SimpleDateFormat的parse方法进行转换。
 
需要引入import org.apache.poi.hssf.usermodel.HSSFDateUtil;HSSFDateUtil工具类处理时间
Date setupTime = HSSFDateUtil.getJavaDate(Double.valueOf(dateStrings));
 
dateStrings为读取的时间格式数据即:“44439”的数字,转换为data并再次自定义格式转换为string
Date setupTime = HSSFDateUtil.getJavaDate(Double.parseDouble(dateStrings));
SimpleDateFormat Format =new SimpleDateFormat("yyyy-MM-dd");
dateStrings =Format.format(setupTime);
————————————————
版权声明:本文为CSDN博主「zkhyzy」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_43887257/article/details/117814782

2)知识认知

varchar是标准sql里面的;varchar2是oracle提供的独有的数据类型。

varchar对于汉字占两个字节,对于数字,英文字符是一个字节,占的内存小;varchar2一般情况下把所有字符都占两字节处理。具体要看数据库使用的字符集,比如GBK,汉字就会占两个字节,英文1个,如果是UTF-8,汉字一般占3个字节,英文还是1个。

varchar对空串不处理;varchar2将空串当做null来处理。

varchar存放固定长度的字符串,最大长度是2000;varchar2是存放可变长度的字符串,最大长度是4000。

如果是要更换不同的数据库,例如mysql,那么就用varchar;如果就用oracle,那么用varchar2比较好一点。
————————————————
版权声明:本文为CSDN博主「江北有野火」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_43191910/article/details/114677382

3)直接使用

        批量导入肯定实在for循环下,那么直接上代码

//2022年1月1日 ↓
if(importDataQuery.getDateFormat().equals(DateUtil.STANDARD_FORMAT_YMD_CH)){ 
    Date date = HSSFDateUtil.getJavaDate(Double.parseDouble(v.toString()));
    sDate = DateUtil.dateFormatToString(date, DateUtil.STANDARD_FORMAT_YMD_CH);
}
//2022年1月1日 10点10分 ↓
else if (importDataQuery.getDateFormat().equals(DateUtil.STANDARD_FORMAT_YMD_HM_CH)) { 
    Date date = DateUtil.stringFormatToDate(v.toString(),DateUtil.STANDARD_FORMAT_YMD_HM_CH);
    sDate = DateUtil.dateFormatToString(date, DateUtil.STANDARD_FORMAT_YMD_HM_CH);
}
//2022-01-01 ↓
else if (importDataQuery.getDateFormat().equals(DateUtil.STANDARD_FORMAT_YMD_P)) { 
    Date date = HSSFDateUtil.getJavaDate(Double.parseDouble(v.toString()));
    sDate = DateUtil.dateFormatToString(date, DateUtil.STANDARD_FORMAT_YMD_P);
} 
//2022-01-01 10:00:00 ↓
else if (importDataQuery.getDateFormat().equals(DateUtil.STANDARD_FORMAT_YMDHMS_P)) { 
    Date date = HSSFDateUtil.getJavaDate(Double.parseDouble(v.toString()));
    sDate = DateUtil.dateFormatToString(date, DateUtil.STANDARD_FORMAT_YMDHMS_P);
}


DateUtil工具类中的dateFormatToString 自己手New就可以
一个Date转String
public static String dateFormatToString(Date date, String format) {
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat(format);
        return simpleDateFormat.format(date);
    }


一个String转Date
public static Date stringFormatToDate(String date, String format) throws ParseException {
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat(format);
        return simpleDateFormat.parse(date);
    }

4)完美入库 

  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值