java格式化处理输入各种不同字符类型的日期时间,并转换为Date、LocalateTime

日常开发中后端得到的字符日期时间往往是多种多样

如:

yyyy-MM-dd HH:mm:ss
yyyy-MM-ddHH:mm:ss
yyyy/MM/dd HH:mm:ss
yyyy/MM/ddHH:mm:ss

如果稍不注意直接转换,后面就可能出现报错。因此我们应该对这些输入不确定的时间进行处理,写一个工具类

public class DateUtils {
    private static List<String> formatList = new ArrayList<>();
    static {
        formatList.add("yyyy-MM-dd HH:mm:ss");
        formatList.add("yyyy-MM-ddHH:mm:ss");
        formatList.add("yyyy/MM/dd HH:mm:ss");
        formatList.add("yyyy/MM/ddHH:mm:ss");
    }

    public static Date parseDate(String dateStr){
        if (StringUtils.isBlank(dateStr)) {
            return null;
        }
        return parseDate(dateStr, formatList);
    }

// 循环处理格式化日期
    public static Date parseDate(String dateStr, List<String> formatList){
        if (StringUtils.isBlank(dateStr)) {
            return null;
        }
        Date date = null;
        dateStr = dateStr.trim();
        for (String format : formatList) {
            SimpleDateFormat sdf = new SimpleDateFormat(format);
            try {
                date = sdf.parse(dateStr);
                break;
            } catch (ParseException e) {
                continue;
            }
        }
        return date;

    }

}

外部调用工具类的public static Date parseDate(String dateStr)方法即可。此时返回的是Date类型(一般保存到数据库的时间是LocalDateTime),我们可以使用JDK8后Date类新增LocalDateTime 转换方法就可以了:

Date date = new Date();
Instant instant = date.toInstant();
ZoneId zone = ZoneId.systemDefault();
//Date转换为LocalDateTime
LocalDateTime localDateTime = LocalDateTime.ofInstant(instant, zone)

如果有不足或可以补充的地址,欢迎指出


版权声明:本文为ls18802694089原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。