excel模板中某列字段“起飞时间”为18:45:00,在进行导入数据时,后台获取的值居然是1899/12/31
excel导入模板:
代码:
首先你解析excel数据时,起飞日期和时间不要用date类型接收,用String。然后能得到两个字符串,将两个字符串截取拼接后再转Date类型给你个代码示例:
excel表格时间那一列设置成文本格式2019-08-06,代码里面用String类型
/**
* 字符转日期
*
* @param dateStr
* @return
*/
public static Date getDateByStr(String dateStr) {
SimpleDateFormat formatter = null;
if (dateStr == null) {
return null;
} else if (dateStr.length() == 7) {
formatter = new SimpleDateFormat("yyyy-MM");
} else if (dateStr.length() == 10) {
formatter = new SimpleDateFormat("yyyy-MM-dd");
} else if (dateStr.length() == 16) {
formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm");
} else if (dateStr.length() == 19) {
formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
} else if (dateStr.length() > 19) {
dateStr = dateStr.substring(0, 19);
formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
} else {
return null;
}
try {
return formatter.parse(dateStr);
} catch (ParseException e) {
log.error(e.getMessage(),e);
return null;
}
}
为什么不获取字符串,然后转换呢
设置单元格为string类型,再在代码里转换
怎么说呢,我用php处理过,php有个phpexcel库就完美解决
java的
如果用Excel导入时间格式是43188.468333这种格式;
public static Date getDate(int days)
{
Calendar c = Calendar.getInstance();
c.set(1900, 0, 1);
c.add(Calendar.DATE, days - 2);
return c.getTime();
}
public static Date getTime(Date date, double ditNumber)
{
Calendar c = Calendar.getInstance();
int mills = (int) (Math.round(ditNumber * 24 * 3600));
int hour = mills / 3600; int minute = (mills - hour * 3600) / 60;
int second = mills - hour * 3600 - minute * 60; c.setTime(date);
c.set(Calendar.HOUR_OF_DAY, hour);
c.set(Calendar.MINUTE, minute);
c.set(Calendar.SECOND, second);
return c.getTime();
}
public static void main(String[] args) throws java.lang.Exception
{
// SimpleDateFormat s = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
// System.out.println(s.format(43188.468333)); Excel数字时间
int days = 43188;
double ditNumber = 0.468333;
Date date =new DateConvert().getDate(days);
Date dateTime = new DateConvert().getTime(date, ditNumber);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println(sdf.format(dateTime));
//输出:2018-03-29 11:14:24
}
希望能帮助到你哈~~
excel设置日期列问文本格式,然后用string去接收填写的日期值,首先验证改值是否符合日期格式,然后再进行后续处理