万能的JAVA任何格式日期转换工具类

本文介绍了一个用于将特定格式的日期字符串转换为Java Date对象的方法。该方法首先检查输入字符串是否包含非法的日期格式组合,然后分别处理包含破折号和斜杠的日期格式,确保日期的合法性并进行转换。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    过程中,被dash.length()坑了一把。

   废话少说,上coding.

 

public static Date convertStrToDate(String s) throws Exception {
    
String dash = "-";
String slash = "/";
String str = s.replace("*", "");
int firstDash = str.indexOf(dash);
int lastDash = str.lastIndexOf(dash);
int firstSlash = str.indexOf(slash);
int lastSlash = str.lastIndexOf(slash);
int dashLength = str.length() - str.replace(dash, "").length();
int slashLength = str.length() - str.replace(slash, "").length();
String year, month, day, strDate;
if (s.contains(dash) && s.contains(slash)) {
    throw new Exception("日期格式不合法:" + s);
}
LogKit.info("dash个数" + dashLength);
Date date = null;
if (str.contains(dash)) {
    year = str.substring(0, firstDash).trim();
    month = dashLength == 1 ? str.substring(firstDash, str.length()).substring(dash.length()) : str.substring(firstDash, lastDash).substring(dash.length());
    day = dashLength == 1 ? "1" : str.substring(lastDash, str.length()).substring(dash.length());
    if (Integer.valueOf(month) > 12 || Integer.valueOf(day) > 31 || Integer.valueOf(year) < 2017) {
        throw new Exception("日期不合法:" + s);
    }
    strDate = year + dash + month + dash + day;
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
    date = sdf.parse(strDate);
    LogKit.info("日期"+strDate);
}
LogKit.info("slash个数" + slashLength);
if (str.contains(slash)) {
    year = str.substring(0, firstSlash).trim();
    month = slashLength == 1 ? str.substring(firstSlash, str.length()).substring(slash.length()) : str.substring(firstSlash, lastSlash).substring(slash.length());
    day = slashLength == 1 ? "1" : str.substring(lastSlash, str.length()).substring(slash.length());
    if (Integer.valueOf(month) > 12 || Integer.valueOf(day) > 31 || Integer.valueOf(year) < 2017) {
        throw new Exception("日期不合法:" + s);
    }
    strDate = year + slash + month + slash + day;
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd");
    date = sdf.parse(strDate);
}

    }
    return date;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值