先介绍一下 ,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