简述
-
Date : jdk1.0 Java中的Date类,包 java.util.Date 不兼容ISO-8601(因为他是可变的)
一个可变的时间点对象;非线程安全
- sql.Date : jdk1.1 java 只有年月日
- sql.Time : jdk1.1 java 只有时分秒
- sql.Timestamp :jdk1.1 java sql包下的时间戳
-
Calendar : jdk1.1 日历类
calendar像是对util.Date的增强 提供了时区以及计算函数
-
LocalDateTime : jdk1.8 日期时间类 兼容ISO-8601 --一个国际标准
calendar的升级版 提供了计算支持且日期不可变 线程安全
- LocalDate : jdk1.8 日期类 兼容ISO-8601
- LocalTime : jdk1.8 时间类 兼容ISO-8601
-
Instant : jdk1.8 时间戳
util.Date的升级版 精度更高;不可变
-
ZoneDateTime : jdk1.8 包含时区的日期对象
格式化类:
- SimpleDateFormat jdk1.1
- DateTimeFormatter jdk1.8
常用方法参考:www.cnblogs.com/q994321263/…
关系转换图
重要!
时区问题
- 不包含时区(创建时使用系统默认时区)
LocalDateTime、LocalDate、LocalTime;util.Date、sql.Date、sql.Timestamp - 包含时区信息,不传的话会使用默认时区(ZoneId.systemDefault()),时区信息会保存到对象中
ZoneDateTIme、Calendar - 特殊类型 时间戳也是不包含时区,一个绝对的时间间隔
Instant、timestamp
补充
时间戳表示方法
- 毫秒数
例如:1690295739000 这个很好理解,就是个时间窗口 用数字标识
- yyyy-MM-ddTHH:mm:ssZ
例如:2023-09-01T15:25:03Z 解释下T和Z的含义
T是表示时间段开始的关键字
Z含义为Zero,代表零时区。UTC时间
The T doesn’t really stand for anything. It is just the separator that the ISO 8601 combined date-time format requires. You can read it as an abbreviation for Time. The Z stands for the Zero timezone, as it is offset by 0 from the Coordinated Universal Time (UTC).