Java时间类总结及转换关系

222 阅读1分钟

简述 

  • 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/…

关系转换图

重要!

image.png

时区问题

  • 不包含时区(创建时使用系统默认时区)
    LocalDateTimeLocalDateLocalTime;util.Date、sql.Date、sql.Timestamp
  • 包含时区信息,不传的话会使用默认时区(ZoneId.systemDefault()),时区信息会保存到对象中
    ZoneDateTIme、Calendar
  • 特殊类型 时间戳也是不包含时区,一个绝对的时间间隔
    Instant、timestamp

补充

时间戳表示方法

  1. 毫秒数

例如:1690295739000 这个很好理解,就是个时间窗口 用数字标识

  1. 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).