zoukankan      html  css  js  c++  java
  • 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());
    

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

    作者:Binge
    本文版权归作者和博客园共有,转载必须给出原文链接,并保留此段声明,否则保留追究法律责任的权利。
  • 相关阅读:
    How To Build CyanogenMod Android for smartphone
    CentOS安装Code::Blocks
    How to Dual boot Multiple ROMs on Your Android SmartPhone (Upto Five Roms)?
    Audacious——Linux音乐播放器
    How to Dual Boot Multiple ROMs on Your Android Phone
    Everything You Need to Know About Rooting Your Android Phone
    How to Flash a ROM to Your Android Phone
    什么是NANDroid,如何加载NANDroid备份?
    Have you considered compiled a batman-adv.ko for android?
    BATMAN—Better Approach To Mobile Adhoc Networking (B.A.T.M.A.N.)
  • 原文地址:https://www.cnblogs.com/binbingg/p/14277135.html
Copyright © 2011-2022 走看看