java 字符串如何直接转LocalDateTime?

1.情景展示

  在实际开发过程中,可能会遇到将前端传的日期格式转成LocalDateTime插入到数据库的情况,如何将日期转成LocalDateTime呢?

2.原因分析

  在Java8中,日期类不同于以前版本的java.util.Date工具类,Date类可以存日期也可以存时间,还能存日期+时间,统统都能塞进去;

  但java8中将日期与时间拆分开来,日期类使用LocalDate,时间类使用LocalTime,日期+时间,使用LocalDateTime;

  如果我们见日期塞进LocalDateTime就会报错:

DateUtil.toLocalDateTime("2021年07月28日", "yyyy年MM月dd日");  

  这个错误的意思就是:日期格式无法转成日期+时间格式。

3.解决方案

  既然,LocalDateTime需要时间,而我们又只有日期的情况下,那就只能自己伪造时间啦。

  方式一:手动拼接时间00:00:00

/*
 * 字符串拼接转日期
 * @date: 2020年08月20日 0020 15:51
 * @param: date
 * @param: format
 * @return: java.time.LocalDateTime
 */
public static LocalDateTime toLocalDateTime(String dateTime, String format) {
    if (StringUtils.isEmpty(dateTime)) {
        return null;
    }
    if (StringUtils.isEmpty(format)) {
        format = "yyyy-MM-dd HH:mm:ss";
    }

    DateTimeFormatter df = DateTimeFormatter.ofPattern(format);
    LocalDateTime ldt = LocalDateTime.parse(dateTime,df);
    return ldt;
}

  调用

String dateStr = "2021年07月28日";
dateStr += " 00:00:00";

LocalDateTime dateTime = DateUtil.toLocalDateTime(dateStr, "yyyy年MM月dd日 HH:mm:ss");
System.out.println(dateTime);

  执行结果:  

  2021-07-28T00:00 

  方式二:DateTimeFormatter设置可选匹配项默认值

/*
 * 日期字符串按指定格式转LocalDateTime
 * @attention:
 * @date: 2021/7/28 15:05
 * @param: dateStr 日期字符串
 * @param: dateFormat 转换前的日期格式
 * @return: java.time.LocalDateTime
 */
@NotNull
public static LocalDateTime toLocalDateTime(String dateStr, String dateFormat) {
    DateTimeFormatter formatter;
    if (StringUtils.isEmpty(dateFormat)) {
        dateFormat = "yyyy-MM-dd";
    }

    if (dateFormat.length() > 11) {// 包含时间
        formatter = DateTimeFormatter.ofPattern(dateFormat);
    } else {// 只有日期
        formatter = new DateTimeFormatterBuilder()
                .appendPattern(dateFormat + "[['T'HH][:mm][:ss]]")
                .parseDefaulting(ChronoField.HOUR_OF_DAY, 0)
                .parseDefaulting(ChronoField.MINUTE_OF_HOUR, 0)
                .parseDefaulting(ChronoField.SECOND_OF_MINUTE, 0)
                .parseDefaulting(ChronoField.MILLI_OF_SECOND, 0)
                .toFormatter();
    }

    return LocalDateTime.parse(dateStr, formatter);
}

  调用  

System.out.println(DateUtils.toLocalDateTime("2021年07月28日", "yyyy年MM月dd日"));

  执行结果:  

  2021-07-28T00:00

写在最后

  哪位大佬如若发现文章存在纰漏之处或需要补充更多内容,欢迎留言!!!

 相关推荐:

 

posted @ 2021-07-28 15:14  Marydon  阅读(9141)  评论(0编辑  收藏  举报