• 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: format
     * @return: java.time.LocalDateTime
     */
    @NotNull
    public static LocalDateTime toLocalDateTime(String dateStr, @NotNull String format) {
        DateTimeFormatter formatter;
        if (StringUtils.isEmpty(format)) {
            format = "yyyy-MM-dd";
        }
        
        if (format.length() > 11) {// 包含时间
            formatter = DateTimeFormatter.ofPattern(format);
        } else {// 只有日期
            formatter = new DateTimeFormatterBuilder()
                    .appendPattern(format + "[['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

    写在最后

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

     相关推荐:

  • 相关阅读:
    Sqli-labs less 36
    python3操作mysql数据库增删改查
    python3连接MySQL数据库
    修改(python) mysql 数据库 使其可以支持插入中文
    十九 Django框架,发送邮件
    十八 Django框架,生成二维码
    十七 Django框架,文件上传
    十六 Django框架,信号
    十五 Django框架,缓存
    十四 Django框架,中间件
  • 原文地址:https://www.cnblogs.com/Marydon20170307/p/15069713.html
Copyright © 2020-2023  润新知