java8 LocalDateTime/LocalDate/LocalTime、java.util.Date/java.sql.Date区别及日期转换方法详解编程语言

先介绍一下 ,LocalDateTime/LocalDate/LocalTime、java.util.Date/java.sql.Date区别

LocalDateTime/LocalDate/LocalTime

java.time.LocalDateTime,是一个日期+时间不带时区,它是个不可更改对象,精确到纳秒。它的日期可以认为是生日,它的时间可以认为是挂钟的时间,比较LocalDateTime时用equals,不要用==或者hashCode。

java.time.LocalDate,是不可变的对象,表达的是日期,它不存储或表达时间和时区,通常以年-月-日的形式展示,比如生日。
java.time.LocalTime,是不可变的对象,表达的是时间,它不存储或表达日期和时区,通常以时-分-秒的形式展示,比如10:15:30。

java.util.Date/java.sql.Date

java.util.Date是专门用来表达UTC(coordinated universal time)的,但jvm宿主机可能不能准确表达UTC。因为在操作系统中,认为1天=24小时60分钟60秒,但utc每一年或二年,会多一秒“闰秒”,闰秒总是会加到一天的最后一秒,并且总是6.30号或者12.31号。
GMT(Greenwich mean time)=universal time (UT),格林尼治时间是民间称呼,ut是科学家叫法,这两者是一样的。但UTC(coordinated universal time)
UTC基于原子时钟,ut是基于天文观察,在实践中,两者差异可以忽略不计,为了让utc与ut一致,utc引入了闰秒。
Date的精度是毫秒。

java.sql.Date,对应数据库中的Date字段类型,数据库中的Date没有时间只有日期,因此java.sql.Date也没有时分秒,只有日期,它带有时区。

总结

  • java.time.LocalDateTime/java.util.Date可以认为对应mysql中的datetime/timestamp,因为都是日期+时间。java.time.LocalDateTime/datetime是无时区的,java.util.Date/timestamp是有时区的。
  • java.sql.Date/java.time.LocalDate对应数据库中的Date,因为都是日期。
  • java.time.LocalTime对应数据库中的Time,因为都是时间。

LocalDateTime 字符串/时间转换

从字符串转为时间通常使用LocalDateTime的静态方法parse;
从时间转为字符串通常使用LocalDateTime的实例方法format;
这两个方法都要用到DateTimeFormatter,通过ofPattern可生成DateTimeFormatter

final LocalDateTime now = LocalDateTime.now(); 
//创建一个日期时间格式器 
final DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS"); 
//LocalDateTime format实例方法用来将时间转为字符串 
final String format = now.format(dateTimeFormatter); 
System.out.println(format); 
//LocalDateTime静态方法parse可以解析字符串 
final LocalDateTime parse = LocalDateTime.parse(format, dateTimeFormatter); 
System.out.println(parse); 

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/20253.html

(0)
上一篇 2021年7月19日
下一篇 2021年7月19日

相关推荐

发表回复

登录后才能评论