LocalDate、LocalTime、LocalDateTime 类的实例是不可变的对象,分别表示使用 ISO-8601日历系统的日期、时间、日期和时间。它们提供了简单的日期或时间,并不包含当前的时间信息。也不包含与时区相关的信息。
注:ISO-8601日历系统是国际标准化组织制定的现代公民的日期和时间的表示法
时间和日期新API(JSR310)
对日期和时间的新的API,主要包括 Instant、Clock、LocalDateTime、DateTimeFormatter、ZonedDateTime 以及替换 Calendar 的 Chronology 等类。
指定2019年11月5号的时间
LocalDate getDate = LocalDate.of(2019, 11, 5);
Period 日期间隔
Period 类表示一段时间的年、月、日,使用between()方法获取两个日期之间的差作为Period 对象返回,然后从Period对象中获取日期单元,包括getYears(),getMonhs(),getDays()方法。
LocalDate startDate = LocalDate.of(2015, 2, 20);
LocalDate endDate = LocalDate.of(2017, 1, 15);
Period period = Period.between(startDate, endDate);
System.out.println("Years:" + period.getYears() +
" months:" + period.getMonths() +
" days:"+period.getDays());
isNegative()可以判断两个时间的先后关系,如果false那么startDate早于endDate。
Duration 时间间隔
Duration类表示秒或纳秒时间间隔,适合处理较短的时间,需要更高的精确性。between()方法可以比较两个瞬间的差。Duration对象也提供了计算其他时间单位的差值,toDays()、toHours()、toMillis()、toMinutes()、toNanos()、tooSeconds()、toNanos()。
Duration duration = Duration.between(transOrderDate, signDate);
Long days = duration.toDays();
Instant 时间戳
用于“时间戳”的运算。它是以Unix元年(传统的设定为UTC时区1970年1月1日午夜时分)开始所经历的描述进行运算。
TemporalAdjuster 时间校正器
该类通过静态方法提供了大量的常用 TemporalAdjuster 的实现。
// 下一个周日
LocalDate nextSunday = LocalDate.now().with(TemporalAdjusters.next(DayOfWeek.SUNDAY));
解析与格式化
java.time.format.DateTimeFormatter 类提供了三种格式化方法:
- 预定义的标准格式
- 语言环境相关的格式
- 自定义的格式
时区的处理
Java8 中加入了对时区的支持,带时区的时间为分别为: ZonedDate、ZonedTime、ZonedDateTime其中每个时区都对应着 ID,地区ID都为 “{区域}/{城市}”的格式(如 Asia/Shanghai)
ZoneId类中包含了所有的时区信息
// 获取所有时区时区信息
ZoneId.getAvailableZoneIds()
// 指定的时区信息获取 ZoneId 对象
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
//获取时间实例
Instant instant = ((Date) date).toInstant();
//获取时间地区ID
ZoneId zoneId = ZoneId.systemDefault();
//转换为LocalDate
LocalDate localDate = instant.atZone(zoneId).toLocalDate();