jdk8日期

[
复制代码

](javascript:void(0); "复制代码")

 1 LocalTime nowTime = LocalTime.now(); 2 System.out.println(nowTime);//当前时间
3 System.out.println(nowTime.minusHours(1));//一小时前
4 System.out.println(nowTime.minusMinutes(1));//一分钟前
5 System.out.println(nowTime.minusSeconds(1));//一秒前
6 System.out.println(nowTime.minusNanos(1));//一纳秒前
7
8 System.out.println(nowTime.plusHours(1));//一小时后
9 System.out.println(nowTime.plusMinutes(1));//一分钟后
10 System.out.println(nowTime.plusSeconds(1));//一秒后
11 System.out.println(nowTime.plusNanos(1));//一纳秒后

[
复制代码

](javascript:void(0); "复制代码")

image

还可以直接使用 minus 和 plus 方法来增加和减少日期时间。LocalDateTime 、LocalDate 、LocalTime 都是类似的。

1 System.out.println(nowDate.minus(1, ChronoUnit.YEARS));

1 System.out.println(nowDate.plus(1, ChronoUnit.YEARS));

ChronoUnit 用来表示时间单位, ChronoUnit 后面只需要替换成相应的年、月、周、日、时、分、秒、纳秒,就能减少或增加相应的单位。

回到顶部

时间戳

JDK8获取时间戳特别简单。Instant类由一个静态的工厂方法now()可以返回当前时间戳。

1 Instant instant = Instant.now(); 2 System.out.println("当前时间戳是:" + instant);//当前时间戳是:2018-09-06T10:14:29.460Z
3 Date date = Date.from(instant); 4 System.out.println("当前时间戳是:" + date);//当前时间戳是:Thu Sep 06 18:14:29 CST 2018
5 instant = date.toInstant();

可以看到,当前时间戳是包含日期和时间的,与java.util.Date很类似,事实上Instant就是JDK8以前的Date,可以使用这两个类中的方法在这两个类型之间进行转换。

回到顶部

日期时间格式化

在JDK8之前,时间日期的格式化非常麻烦,经常使用SimpleDateFormat来进行格式化,但是SimpleDateFormat并不是线程安全的。在JDK8中,引入了一个全新的线程安全的日期与时间格式器DateTimeFormatter。

[
复制代码

](javascript:void(0); "复制代码")

1 LocalDateTime ldt = LocalDateTime.now(); 2 System.out.println(ldt);//2018-09-06T18:22:47.366
3 DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); 4 String ldtStr = ldt.format(dtf); 5 System.out.println(ldtStr);//2018-09-06 18:22:47
6 String ldtStr1 = dtf.format(ldt); 7 System.out.println(ldtStr1);//2018-09-06 18:22:47

[
复制代码

](javascript:void(0); "复制代码")

正反都能调用format方法。

回到顶部

计算日期时间差

在Java8中,我们可以使用以下类来计算日期时间差异:

java.time.Period

主要是 Period 类方法 getYears(),getMonths() 和 getDays() 来计算。只能精确到年月日。

用于 LocalDate 之间的比较。

[
复制代码

](javascript:void(0); "复制代码")

1 LocalDate today = LocalDate.now(); 2 System.out.println(today);//2018-09-06
3 LocalDate birthDate = LocalDate.of(1992, 1, 11); 4 System.out.println(birthDate);//1990-10-01
5
6 Period period = Period.between(birthDate, today);//第二个参数减第一个参数
7 System.out.printf("年龄 : %d 年 %d 月 %d 日", period.getYears(), period.getMonths(), period.getDays());//年龄 : 27 年 11 月 5 日

[
复制代码

](javascript:void(0); "复制代码")

java.time.Duration

提供了使用基于时间的值测量时间量的方法。

用于 LocalDateTime 之间的比较。也可用于 Instant 之间的比较。

[
复制代码

](javascript:void(0); "复制代码")

 1 LocalDateTime today = LocalDateTime.now(); 2 System.out.println(today);
3 LocalDateTime birthDate = LocalDateTime.of(1990,10,1,10,50,30);
4 System.out.println(birthDate);
5
6 Duration duration = Duration.between(birthDate, today);//第二个参数减第一个参数
7 System.out.println(duration.toDays());//两个时间差的天数
8 System.out.println(duration.toHours());//两个时间差的小时数
9 System.out.println(duration.toMinutes());//两个时间差的分钟数
10 System.out.println(duration.toMillis());//两个时间差的毫秒数
11 System.out.println(duration.toNanos());//两个时间差的纳秒数

[
复制代码

](javascript:void(0); "复制代码")

image

java.time.temporal.ChronoUnit

ChronoUnit类可用于在单个时间单位内测量一段时间,这个工具类是最全的了,可以用于比较所有的时间单位。

[
复制代码

](javascript:void(0); "复制代码")

 1 LocalDateTime today = LocalDateTime.now(); 2 System.out.println(today);
3 LocalDateTime birthDate = LocalDateTime.of(1990,10,1,10,50,30);
4 System.out.println(birthDate);
5
6 System.out.println("相差的年数:" + ChronoUnit.YEARS.between(birthDate, today)); 7 System.out.println("相差的月数:" + ChronoUnit.MONTHS.between(birthDate, today)); 8 System.out.println("相差的周数:" + ChronoUnit.WEEKS.between(birthDate, today)); 9 System.out.println("相差的天数:" + ChronoUnit.DAYS.between(birthDate, today)); 10 System.out.println("相差的时数:" + ChronoUnit.HOURS.between(birthDate, today)); 11 System.out.println("相差的分数:" + ChronoUnit.MINUTES.between(birthDate, today)); 12 System.out.println("相差的秒数:" + ChronoUnit.SECONDS.between(birthDate, today)); 13 System.out.println("相差的毫秒数:" + ChronoUnit.MILLIS.between(birthDate, today)); 14 System.out.println("相差的微秒数:" + ChronoUnit.MICROS.between(birthDate, today)); 15 System.out.println("相差的纳秒数:" + ChronoUnit.NANOS.between(birthDate, today)); 16
17 System.out.println("相差的半天数:" + ChronoUnit.HALF_DAYS.between(birthDate, today)); 18 System.out.println("相差的十年数:" + ChronoUnit.DECADES.between(birthDate, today)); 19 System.out.println("相差的世纪(百年)数:" + ChronoUnit.CENTURIES.between(birthDate, today)); 20 System.out.println("相差的千年数:" + ChronoUnit.MILLENNIA.between(birthDate, today)); 21 System.out.println("相差的纪元数:" + ChronoUnit.ERAS.between(birthDate, today));

[
复制代码

](javascript:void(0); "复制代码")

image

你可能感兴趣的:(jdk8日期)