zoukankan      html  css  js  c++  java
  • 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

    写在最后

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

     相关推荐:

  • 相关阅读:
    年终了,总结一下
    IIS7下安装.net1.1
    CSLA中的连接管理器ConnectionManager
    CSLA.NET权限规则的困惑
    修改 D
    存储过程万能分页 D
    C/S框架WebService架构用户凭证(令牌)解决方案
    C/S系统开发框架 WebService架构负载均衡技术(Load Balancing)
    C# .NET 开发框架 ClassGenerator 源码生成器 (C/S框架网)
    .Net开发框架
  • 原文地址:https://www.cnblogs.com/Marydon20170307/p/15069713.html
Copyright © 2011-2022 走看看