首页 > 编程语言 >java 字符串如何直接转LocalDateTime?

java 字符串如何直接转LocalDateTime?

时间:2023-02-15 11:31:44浏览次数:41  
标签:00 java dateFormat 日期 2021 dateStr 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?_JAVAUTILS

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

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

写在最后

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

作者:​​Marydon




标签:00,java,dateFormat,日期,2021,dateStr,LocalDateTime,字符串
From: https://blog.51cto.com/u_15964717/6058997

相关文章

  • java 文件File与byte[]数组相互转换的两种方式
     1.文件转byte[]方式一:文件输入流Filefile=newFile("C:\\Users\\Marydon\\Desktop\\个人信用报告.pdf");try{FileInputStreamfis=newFileInputStream(file);......
  • JavaScript 中 ?. 和 ?? 分别是什么?
    ?.和??是JavaScript中的两个新操作符,分别是可选链操作符(optionalchainingoperator)和空值合并操作符(nullishcoalescingoperator)。?.操作符?.可选链操作符用于......
  • java json对象转json字符串(带转义符)(json对象嵌套json字符串)
    1.情景展示如上图所示,这一个标准的json字符串,双引号需要使用反斜杠\进行转义,一般情况下,我们是用不到这种json字符串的,在java中,json字符串的通常表现形式是这种:......
  • java 实体类Bean与Map互相转化
     1.情景展示java对象与Map之间进行相互转换,如何实现? 2.分析通过org.apache.commons.beanutils.BeanUtils类来实现所需jar包<dependency><groupId>com......
  • Java 枚举类转json对象
     1.情景展示 如上图所示,我想要将枚举类转换成json对象,key对应属性名称,value对应属性值,效果如下:{"IvcVoucherCode":"200","IvcVoucherStatus":"票据模板下载成功"}......
  • java8 Lambda表达式遍历并移除元素,报错:ConcurrentModificationException的解决办法
     1.情景展示已知json对象MainExt需要把值为空数组的key移除掉,下面是执行代码执行结果报错:java.util.ConcurrentModificationException 2.原因分析大致过......
  • Javase基础-day9 ATM系统
    ATM系统功能实战系统准备、首页设计系统准备内容分析:①每个用户的账户信息都是一个对象,需要提供账户类。②需要准备一个容器,用于存储系统全部账户对象信息。③首页只......
  • 【LeetCode队列#03】删除字符串中所有的相邻重复项
    删除字符串中所有的相邻重复项力扣题目链接(opensnewwindow)给出由小写字母组成的字符串S,重复项删除操作会选择两个相邻且相同的字母,并删除它们。在S上反复执行重......
  • Java Day 5
    二维数组声明:数组类型【】【】 数组名;如何创建二维数组对象及初始化动态初始化1.数组名=new元素的数据类型[行长度][每一行的列长度];  每一行的列数相同2.......
  • C6054警告:可能没有为字符串添加字符串零终止符
    当用一个字符数组作为字符串的缓冲区时,在定义数组时一定要初始化为0.否则会提示C6054警告.1#include<stdio.h>2#include<string.h>3#defineMAX_LENGTH10......