LocalDate、LocalTime、LocalDateTime 类的实例是不可变的对象,分别表示使用 ISO-8601日历系统的日期、时间、日期和时间。它们提供了简单的日期或时间,并不包含当前的时间信息。也不包含与时区相关的信息。

注:ISO-8601日历系统是国际标准化组织制定的现代公民的日期和时间的表示法

时间和日期新API(JSR310)

对日期和时间的新的API,主要包括 Instant、Clock、LocalDateTime、DateTimeFormatter、ZonedDateTime 以及替换 Calendar 的 Chronology 等类。

指定2019年11月5号的时间

  1. LocalDate getDate = LocalDate.of(2019, 11, 5);

Period 日期间隔

Period 类表示一段时间的年、月、日,使用between()方法获取两个日期之间的差作为Period 对象返回,然后从Period对象中获取日期单元,包括getYears(),getMonhs(),getDays()方法。

  1. LocalDate startDate = LocalDate.of(2015, 2, 20);
  2. LocalDate endDate = LocalDate.of(2017, 1, 15);
  3. Period period = Period.between(startDate, endDate);
  4. System.out.println("Years:" + period.getYears() +
  5. " months:" + period.getMonths() +
  6. " days:"+period.getDays());

isNegative()可以判断两个时间的先后关系,如果false那么startDate早于endDate。

Duration 时间间隔

Duration类表示秒或纳秒时间间隔,适合处理较短的时间,需要更高的精确性。between()方法可以比较两个瞬间的差。Duration对象也提供了计算其他时间单位的差值,toDays()、toHours()、toMillis()、toMinutes()、toNanos()、tooSeconds()、toNanos()。

  1. Duration duration = Duration.between(transOrderDate, signDate);
  2. Long days = duration.toDays();

Instant 时间戳

用于“时间戳”的运算。它是以Unix元年(传统的设定为UTC时区1970年1月1日午夜时分)开始所经历的描述进行运算。

TemporalAdjuster 时间校正器

该类通过静态方法提供了大量的常用 TemporalAdjuster 的实现。

  1. // 下一个周日
  2. LocalDate nextSunday = LocalDate.now().with(TemporalAdjusters.next(DayOfWeek.SUNDAY));

解析与格式化

java.time.format.DateTimeFormatter 类提供了三种格式化方法:

  1. 预定义的标准格式
  2. 语言环境相关的格式
  3. 自定义的格式

时区的处理

Java8 中加入了对时区的支持,带时区的时间为分别为: ZonedDate、ZonedTime、ZonedDateTime其中每个时区都对应着 ID,地区ID都为 “{区域}/{城市}”的格式(如 Asia/Shanghai)
ZoneId类中包含了所有的时区信息

  1. // 获取所有时区时区信息
  2. ZoneId.getAvailableZoneIds()
  3. // 指定的时区信息获取 ZoneId 对象
  4. ZoneId.of(id)

与传统日期的转换

TO 遗留类 From 遗留类
java.time.Instant
java.util.Date
Date.from(instant) date.toInstant()
java.time.Instant
java.sql.Timestamp
Timestamp.from(instant) timestamp.toInstant()
java.time.ZonedDateTime
java.util.GregorianCalendar
GregorianCalendar.from(zonedDateTim e) cal.toZonedDateTime()
java.time.LocalDate
java.sql.Time
Date.valueOf(localDate) date.toLocalDate()
java.time.LocalTime
java.sql.Time
Date.valueOf(localDate) date.toLocalTime()
java.time.LocalDateTime
java.sql.Timestamp
Timestamp.valueOf(localDateTime) timestamp.toLocalDateTime()
java.time.ZoneId
java.util.TimeZone
Timezone.getTimeZone(id) timeZone.toZoneId()
java.time.format.DateTimeFormatter
java.text.DateFormat
formatter.toFormat()

Date —> LocalDate

  1. //获取时间实例
  2. Instant instant = ((Date) date).toInstant();
  3. //获取时间地区ID
  4. ZoneId zoneId = ZoneId.systemDefault();
  5. //转换为LocalDate
  6. LocalDate localDate = instant.atZone(zoneId).toLocalDate();