Java JDK8中时间的一些操作

1、计算出代码块运行的时间

      List<Integer> array = new ArrayList<>();
        for (int i = 0; i <20000 ; i++) {
            array.add(i);
        }
        Instant start = Instant.now();
        List<Integer> collect1 = array.parallelStream().sorted(Comparator.reverseOrder()).collect(Collectors.toList());
        List<Integer> collect2 = array.stream().sorted(Comparator.reverseOrder()).collect(Collectors.toList());
        Instant end = Instant.now();
        System.out.println("耗费时间"+ Duration.between( start,end ).toMillis());
        System.out.println(collect1); //耗费时间75
        System.out.println(collect2);   //耗费时间140

2、LocalDate转LocalDateTime 或 localDateTime转LocalDate

        //LocalDate转localDateTime
        LocalDate localDate = LocalDate.now();
        LocalDateTime localDateTime1 = localDate.atStartOfDay();
        LocalDateTime localDateTime2 = localDate.atTime(23,59,59);
        LocalDateTime localDateTime3 = localDate.atTime(LocalTime.now());
        System.out.println("localDateTime1:"+localDateTime1);
        System.out.println("localDateTime2:"+localDateTime2);
        System.out.println("localDateTime3:"+localDateTime3);

//        localDateTime1:2021-12-01T00:00
//        localDateTime2:2021-12-01T23:59:59
//        localDateTime3:2021-12-01T14:39:09.901

       //localDateTime转LocalDate
        LocalDate localDate1 = localDateTime1.toLocalDate();
        System.out.println("localDate1:"+localDate1);


        //LocalDateTime倒推3天时间取最小值和最大值
        LocalDateTime start1 = LocalDateTime.of(LocalDate.now().minus(3L, ChronoUnit.DAYS), LocalTime.MIN);
        LocalDateTime start2 = LocalDateTime.of(LocalDate.now().minus(3L, ChronoUnit.DAYS), LocalTime.MAX);
        System.out.println("start1:"+start1);
        System.out.println("start2:"+start2);
//        start1:2022-02-15T00:00
//        start2:2022-02-15T23:59:59.999999999

3、BigDecimal四舍五入保留6位小数(double会丢失精度建议转String)

    public static void main(String[] args) throws Exception {
        double data1 = 2.3333665;
        String data2 = String.valueOf(data1);
        BigDecimal bigDecimal1 = new BigDecimal(data1);
        System.out.println("bigDecimal1:"+bigDecimal1);

        BigDecimal bigDecimal2 = new BigDecimal(data2);
        System.out.println("bigDecimal2:"+bigDecimal2);

        double result1 = new BigDecimal(data1).setScale(6, BigDecimal.ROUND_HALF_UP).doubleValue();
        System.out.println("result1:"+result1);

        double result2 = new BigDecimal(data2).setScale(6, BigDecimal.ROUND_HALF_UP).doubleValue();
        System.out.println("result2:"+result2);

//        bigDecimal1:2.333366499999999899017666393774561583995819091796875
//        bigDecimal2:2.3333665
//        result1:2.333366
//        result2:2.333367
}

4、String转LocalDate和LocalDateTime

        //获取当前时间
        System.out.println(LocalDateTime.now()); 
        //String转LocalDate
        String time1 = "2021-12-05";
        LocalDate bizDate1 = LocalDate.parse(time1, DateTimeFormatter.ofPattern("yyyy-MM-dd"));
        System.out.println("====bizDate1:"+bizDate1);

        //String转LocalDateTime
        String time2 = "2021-12-05 12:45:26";
        LocalDateTime bizDate2 = LocalDate.parse(time2, DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")).atStartOfDay();
        System.out.println("====bizDate2:"+bizDate2);

//        2021-12-02T16:14:24.048
//        ====bizDate1:2021-12-05
//        ====bizDate2:2021-12-05T00:00

5、LocalDateTime时间相减计算

 
    
//计算出两个时间相差的天数、小时、分钟、秒
public static void main(String[] args) throws Exception {
        //time1 - time2
        String time1 = "2021-12-05 12:45:26";
        String time2 = "2021-12-04 12:45:26";
        DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
        LocalDateTime parse1 = LocalDateTime.parse(time1, df);
        LocalDateTime parse2 = LocalDateTime.parse(time2, df);
        System.out.println("===获取天数:"+parse2.until(parse1, ChronoUnit.DAYS));
        System.out.println("===获取小时:"+parse2.until(parse1, ChronoUnit.HOURS));
        System.out.println("===获取分钟:"+parse2.until(parse1, ChronoUnit.MINUTES));
        System.out.println("===获取秒:"+parse2.until(parse1, ChronoUnit.SECONDS));
//        ===获取天数:1
//        ===获取小时:24
//        ===获取分钟:1440
//        ===获取秒:86400
}

//LocalDateTime判断两个时间的大小
    public static void main(String[] args) throws Exception {
        String time1 = "2021-12-05 12:45:26";
        String time2 = "2021-12-04 12:45:26";
        DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
        LocalDateTime parse1 = LocalDateTime.parse(time1, df);
        LocalDateTime parse2 = LocalDateTime.parse(time2, df);
        System.out.println(parse1.isBefore(parse2)); // time1 < time2  false
        System.out.println(parse1.isAfter(parse2)); // time1 > time2  true
        System.out.println(parse1.isEqual(parse2)); // time1 = time2  false
}



/**
     * 计算出两个时间戳的相差时间
     * 当前时间 - 需要计算的时间 = 结果时间
     * @param now 当前时间
     * @param end 需要计算的时间
     * @return
     */
    public static Map<String, Long> calculateTimeDifference(LocalDateTime now, LocalDateTime end) {
        Map<String, Long> maps = Maps.newHashMap();
        Duration duration = Duration.between(now, end); //now - end = duration
        Long days = duration.toDays(); //相差的天数
        Long hours = duration.toHours();//相差的小时数
        Long minutes = duration.toMinutes();//相差的分钟数
        Long millis = duration.toMillis();//相差毫秒数
        Long nanos = duration.toNanos();//相差的纳秒数
        maps.put("days", days);
        maps.put("hours", hours);
        maps.put("minutes", minutes);
        maps.put("millis", millis);
        maps.put("nanos", nanos);
        return maps;
    }

    public static void main(String[] args) {
    //获取当前时间再加10分钟
    System.out.println(calculateTimeDifference(LocalDateTime.now(), LocalDateTime.now().plusMinutes(10))); 
    }


    

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值