1.java8新特性-新时间与日期API本地时间与时间戳
LocalDate
、LocalTime
、LocalDateTime
类的实例是不可变的对象,分别表示使用ISO-8601的日历系统的日期、时间、日期和时间。新的API提供了简单的日期和时间的获取方法。不包含与时区有关的信息
1.1 使用静态方法now获取本地时间
1 2 3 4 5 6
| LocalDate now = LocalDate.now(); System.out.println("获取系统的日期:"+now); LocalTime localTime = LocalTime.now(); System.out.println("获取系统的时间:"+localTime); LocalDateTime localDateTime = LocalDateTime.now(); System.out.println("获取系统的日期和时间:"+localDateTime);
|
1.2 使用静态方法of获取日期和时间
1 2 3 4 5 6
| LocalDate localDate = LocalDate.of(2012, 3, 23); System.out.println(localDate); LocalTime localTime = LocalTime.of(12, 12); System.out.println(localTime); LocalDateTime localDateTime = LocalDateTime.of(2012, 3, 24, 12, 12, 12); System.out.println(localDateTime);
|
1.3 plusDays、plusWeeks、plusMonths、plusYear向当前LocalDate对象添加几天、几周、几个月、几年
1 2 3 4 5 6 7 8 9 10
| LocalDate localDate = LocalDate.now(); System.out.println(localDate); LocalDate localDate1 = localDate.plusDays(2L); System.out.println(localDate1); LocalDate localDate2 = localDate.plusMonths(2L); System.out.println(localDate2); LocalDate localDate3 = localDate.plusWeeks(2L); System.out.println(localDate3); LocalDate localDate4 = localDate.plusYears(2L); System.out.println(localDate4);
|
1.4 Instant时间戳
时间戳(以Unix元年:1970年1月1日00:00:00到某个时间之间的毫秒值)
1 2 3 4 5 6 7 8 9
| Instant now = Instant.now(); System.out.println(now);
OffsetDateTime offsetDateTime=now.atOffset(ZoneOffset.ofHours(8)); System.out.println(offsetDateTime);
long l = now.toEpochMilli(); System.out.println(l);
|
1.5 Duration计算两个时间之间的间隔,Period计算两个日期之间的间隔
Duration
和Period
的使用方式相同
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| Instant now = Instant.now(); try { Thread.sleep(1000L); } catch (InterruptedException e) { e.printStackTrace(); } Instant now2 = Instant.now();
Duration duration = Duration.between(now, now2);
System.out.println(duration);
long l = duration.toNanos();
System.out.println(l);
|
2.java8新特性-新时间与日期API-时间校正器
TemporalAdjuster
:时间校正器。有时候我们需要获取例如:将日期调整到“下周日”等操作。
TemporalAdjusters
:该类通过静态方法提供了大量的常用TemporalAdjuster
的实现
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| LocalDateTime ldt = LocalDateTime.now(); System.out.println(ldt);
LocalDateTime dateTime = ldt.with(TemporalAdjusters.next(DayOfWeek.SUNDAY)); System.out.println(dateTime);
LocalDateTime with = ldt.with(l -> { LocalDateTime ldt4 = (LocalDateTime) l; DayOfWeek dayOfWeek = ldt4.getDayOfWeek(); System.out.println(dayOfWeek); if (dayOfWeek.equals(DayOfWeek.FRIDAY)) { return ldt4.plusDays(3L); } else if (dayOfWeek.equals(DayOfWeek.SUNDAY)) { return ldt4.plusDays(2L); } else { return ldt4.plusDays(1L); } }); System.out.println(with);
|
3.java8新特性-新时间与日期API-时间格式化与时区处理
3.1时间和日期的格式化
1 2 3 4 5 6 7 8 9
| DateTimeFormatter isoLocalDate = DateTimeFormatter.ISO_LOCAL_DATE; LocalDateTime now = LocalDateTime.now(); System.out.println(now); String format = now.format(isoLocalDate); System.out.println(format);
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy年MM月dd日"); String format1 = dateTimeFormatter.format(now); System.out.println(format1);
|
3.2 时区的处理
java8中加入了对时区的支持,带时区的时间分别为ZonedDate
,ZonedTIme
,ZoneDateTime
。其中每个时区都对应着ID,地区ID都是区域/城市
的格式,例如:Asia/Shanghai
等。
ZoneId
该类中包含了所有的时区信息:
getAvailableZoneIds():可以获取所有时区的信息
of(id):用指定的时区信息获取ZoneId对象
1 2 3 4 5 6 7 8 9 10
| Set<String> availableZoneIds = ZoneId.getAvailableZoneIds(); availableZoneIds.forEach(System.out::println);
LocalDateTime now = LocalDateTime.now(ZoneId.of("Asia/Shanghai")); System.out.println(now);
LocalDateTime now1 = LocalDateTime.now(); ZonedDateTime zonedDateTime = now1.atZone(ZoneId.of("Asia/Shanghai")); System.out.println(zonedDateTime);
|