java.time period_Java8 Period 类与 Duration 类 用法详解

引言

Java 8 中引入了两个与日期相关的新类:

Period :基于日期值

Duration:基于时间值

它们最大的作用就不需要你自己复杂的计算关于两个年月日之间的相差的时间或日期啦.

Period 类与 Duration 类都是一段持续时间的概念,如果需要对比时间,它们就需要一个固定的时间值,所以就需要 LocalDate 类与 Instant 类来配合它们使用:

Period 对应使用 LocalDate ,它们的作用范围域都是日期(年/月/日)

Duration 对应使用 Instant,它们的作用范围域都是时间(天/时/分/秒/毫秒/纳秒)

LocalDate

精度到日期记录固定时间值的LocalDate,创建方式:

LocalDate localDate1 = LocalDate.of(2019,9,1);

LocalDate localDate2 = LocalDate.ofYearDay(2019,150);

Period

对比时间

LocalDate start = LocalDate.of(2019,9,25);

LocalDate end = LocalDate.of(2019,9,29);

Period period = Period.between(start, end);

System.out.println("相差天数="+period.getDays());

Instant

以精度到纳秒记录固定的时间值的Instant,创建方式:

Instant instant1 = Instant.parse("2017-10-03T10:15:30.00Z");//用解析字符串的形式创建

Instant instant2 = Instant.ofEpochMilli(System.currentTimeMillis());//用传入单位为毫秒的时间戳创建

Instant instant3 = Instant.ofEpochSecond(System.currentTimeMillis()/1000);//用传入为单位秒的

以上代码都是创建了某个时间点的值

Duration

Duration字面意思是持续时间

设置指定单位的持续时间

Duration durationDays = Duration.ofDays(1);//天

Duration durationHours = Duration.ofHours(1);//小时

Duration durationMinutes = Duration.ofMinutes(1);//分

Duration durationSeconds = Duration.ofSeconds(1);//秒

Duration durationMillis = Duration.ofMillis(1);//毫秒

获取指定单位的持续时间

Duration duration = Duration.ofDays(1);//设置一天时间

long timeHours = duration.toHours();//小时

long timeMinutes = duration.toMinutes();//分钟

long timeMillis = duration.toMillis();//毫秒

long timeNanos = duration.toNanos();//纳秒

String timeString = duration.toString(); //此持续时间的字符串表示形式,使用基于ISO-8601秒*的表示形式,例如 PT8H6M12.345S

System.out.println("timeHours时间="+timeHours);

System.out.println("timeMinutes时间="+timeMinutes);

System.out.println("timeMillis时间="+timeMillis);

System.out.println("timeNanos时间="+timeNanos);

System.out.println("timeString时间="+timeString);

获取2个时间点之间差值的持续时间

long todayTimeMillis = System.currentTimeMillis();

long yesterdayTimeMillis = todayTimeMillis - 24 * 60 * 60 * 1000;

Instant start = Instant.ofEpochMilli(yesterdayTimeMillis);

Instant end = Instant.ofEpochMilli(todayTimeMillis);

Duration duration = Duration.between(start, end);

System.out.println("天数="+duration.toDays());

注意这个天数是可以负数,意味着如果开始时间比结束时间更后面就会得到负数天数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值