请教一下各位大佬,如何处理excel中时间格式数据,在代码获取的值为1899/12/31问题,谢谢!

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去接收填写的日期值,首先验证改值是否符合日期格式,然后再进行后续处理