java 字符串如何直接转LocalDateTime?

摘要:
00/**字符串拼接到日期*@date:}if(StringUtils.isEmpty(格式)){format=“yyyy MM ddHH:}DateTimeFormatterdf=DateTimeFormatter.Pattern(格式);DateTimeFormater设置可选匹配的默认值/**日期字符串转换为LocalDateTime*@注意:
 

1.情景展示

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

2.原因分析

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

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

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

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

java 字符串如何直接转LocalDateTime?第1张

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

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

写在最后

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

 相关推荐:

 

免责声明:文章转载自《java 字符串如何直接转LocalDateTime?》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Redis值的写入与读取cv2.namedWindow()函数下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

【Raspberry Pi】crontab 定时任务

在linux上做定时任务一般用crond 两种方法上文已列,但昨天写的crond命令却一直都没有运行,上网查,有说是环境变量的,也有说是时间问题的,都改过,但还没有效。 今天再次认真读了一遍crontab的说明,发现昨天的命令理解错了,少打了一个星号,再改多打一个空格也不行,又改,在非root用户下貌似也不行。最后用root权限来写终于成功: sudo c...

Java中生成唯一ID的方法

有时我们不依赖于数据库中自动递增的字段产生唯一ID,比如多表同一字段需要统一一个唯一ID,这时就需要用程序来生成一个唯一的全局ID。 UUID 从Java 5开始, UUID 类提供了一种生成唯一ID的简单方法。UUID是通用唯一识别码 (Universally Unique Identifier)的缩写,UUID来源于OSF(Open Software...

【译】Java SE 14 Hotspot 虚拟机垃圾回收调优指南

原文链接:HotSpot Virtual Machine Garbage Collection Tuning Guide,基于Java SE 14。 本文主要包括以下内容: 优化目标与策略(Ergonomics) 垃圾收集器实现(Garbage Collector Implementation) 影响垃圾收集性能的因素 总堆(Total Heap) 年...

jwt 认证规则

目录 jwt 认证规则: 介绍: 内容: 核心算法: 签发算法: 校验算法: 刷新算法: django-rest-framework-jwt 自定义配置: 模块的使用: _check_payload 方法 : _check_user 方法: jwt 认证规则: 介绍: jwt: json web token 优点:...

SpringCloud认识五之分布式锁和分布式事务

SpringCloud认识五之分布式锁和分布式事务 https://blog.csdn.net/weixin_41446894/article/details/86260854 本人讲述的是基于 Spring Cloud 的分布式架构,那么也带来了线程安全问题,比如一个商城系统,下单过程可能由不同的微服务协作完成,在高并发的情况下如果不加锁就会有问题,而传...

标准控件(二)——Calendar

Calendar     日程控件 属性     Borderstyle             边框样式     DayNameFormat           日标头的文本格式     FirstDayOfWeek              NextPrevFormat          月导航按钮的格式   方法     DayRender()  ...