zoukankan      html  css  js  c++  java
  • java 8 新特性之日期-时间 API

    Date-Time API简介

    在Java8之前的版本中,我们处理时间类型常常使用的是java.util包下的Date类。但使用Date类却有诸多的弊端,如: java.util.Date 是非线程安全的,所有的日期类都是可变的;日期/时间类的定义并不一致,在java.util和java.sql的包下都含有Date类,在开发过程中极易出错; 日期类并不提供国际化,没有时区支持。为了解决以上问题,Java8在java.time 包下提供了很多新的 API,常用的类包括LocalDate、LocalTime、LocalDateTime,用以处理日期,时间,日期/时间等

    LocalDate类

    LocalDate是一个不可变类,在不考虑时区的情况下可以对日期(不包括时间)进行各种操作,它的默认格式是yyyy-MM-dd
    获取当前日期以及年、月、日
    代码示例:

    //获取当前日期以及年、月、日
    LocalDate localDate = LocalDate.now();
    int year = localDate.getYear();
    int month = localDate.getMonthValue();
    int day = localDate.getDayOfMonth();
    System.out.println("当前日期:" + localDate);
    System.out.println("年:" + year + "  月:" + month + "  日:" + day);
    

    运行结果:

    当前日期:2018-12-12
    年:2018  月:12  日:12
    

    获取指定的日期
    代码示例:

    //获取指定的日期
    LocalDate specifiedDay = LocalDate.of(2008, 8, 18);
    System.out.println("指定日期:" + specifiedDay);
    

    运行结果:

    指定日期:2008-08-18
    

    使用DateTimeFormatter进行日期格式化
    代码示例:

    //使用DateTimeFormatter类进行日期格式化
    LocalDate localDate = LocalDate.now();
    DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy年MM月dd日");
    System.out.println("格式化后的日期:" + formatter.format(localDate));
    
    //将字符串转为LocalDate类型
    LocalDate newDate =LocalDate.parse("2018年12月12日", formatter);
    System.out.println("字符串转日期类型:" + newDate);
    

    运行结果:

    格式化后的日期:2018年12月12日
    字符串转日期类型:2018-12-12
    

    比较两个时间的先后顺序以及是否相等
    代码示例:

    LocalDate localDate = LocalDate.now();
    LocalDate otherDate = LocalDate.of(2018, 11, 11);
            
    //equals方法用于比较两个日期是否相等
    if(localDate.equals(otherDate)) {
        System.out.println("localDate与otherDate相等!");
    } else {
         //isAfter和isBefore方法用于比较两个日期前后顺序
         if(localDate.isAfter(otherDate)) {
             System.out.println("localDate晚于otherDate!");
         }
         if(localDate.isBefore(otherDate)) {
             System.out.println("localDate早于otherDate!");
         }
    }
    

    运行结果:

    localDate晚于otherDate!
    

    对日期做加减运算
    代码示例:

    LocalDate localDate = LocalDate.now();
    System.out.println("2年后日期:" + localDate.plusYears(2));
    System.out.println("6月后日期:" + localDate.plusMonths(6));
    System.out.println("3周后日期:" + localDate.plusWeeks(3));
    System.out.println("15天后日期:" + localDate.plusDays(15));
    
    System.out.println("2年前日期:" + localDate.minusYears(2));
    System.out.println("6月前日期:" + localDate.minusMonths(6));
    System.out.println("3周前日期:" + localDate.minusWeeks(3));
    System.out.println("15天前日期:" + localDate.minusDays(15));
    

    运行结果:

    2年后日期:2020-12-12
    6月后日期:2019-06-12
    3周后日期:2019-01-02
    15天后日期:2018-12-27
    
    2年前日期:2016-12-12
    6月前日期:2018-06-12
    3周前日期:2018-11-21
    15天前日期:2018-11-27
    

    获取日期间隔的天数
    代码示例:

    //获取某年份的第N天的日期
    LocalDate specialDay = LocalDate.ofYearDay(2018, 100);
    System.out.println("2018年的第100天:" + specialDay);
    //获取两个日期的间隔天数
    long intervalDay = localDate.toEpochDay() - specialDay.toEpochDay();
    System.out.println("间隔天数: " + intervalDay);
    

    运行结果:

    2018年的第100天:2018-04-10
    间隔天数:246
    

    LocalTime类

    LocalTime与LocalDate一样,也是一个不可变的类,默认格式是hh:mm:ss.zzz,它提供了对时间的各种操作
    获取当前时间以及自定义时间
    代码示例:

    //获取当前时间、时、分、秒以及自定义时间
    LocalTime localTime = LocalTime.now();
    int hour = localTime.getHour();
    int minute = localTime.getMinute();
    int second = localTime.getSecond();
    System.out.println("当前时间:" + localTime);
    System.out.println("时:" + hour + "  分:" + minute + "  秒:" + second);
    
    //获取自定义时间
    LocalTime specifiedTime = LocalTime.of(15, 30, 45);
    System.out.println("自定义时间:" + specifiedTime);
    

    运行结果:

    当前时间:13:45:59.039
    时:13  分:45  秒:59
    自定义时间:15:30:45
    

    使用DateTimeFormatter进行时间格式化
    代码示例:

    //使用DateTimeFormatter类进行时间格式化
    LocalTime localTime = LocalTime.now();
    DateTimeFormatter formatter = DateTimeFormatter.ofPattern("HH时mm分ss秒");
    System.out.println("格式化后的时间:" + formatter.format(localTime));
    
    //将字符串转为LocalTime类型
    LocalTime newTime = LocalTime.parse("20时35分45秒", formatter);
    System.out.println("字符串转时间类型:" + newTime);
    

    运行结果:

    格式化后的时间:20时38分33秒
    字符串转时间类型:20:35:45
    

    比较两个时间的先后顺序
    代码示例:

    //equals方法比较两个时间是否相等
    if(localTime.equals(specifiedTime)) {
        System.out.println("localTime与specifiedTime相等!");
    } else {
        //isAfter、isBefore方法比较两个时间的先后顺序
        if(localTime.isAfter(specifiedTime)) {
            System.out.println("localTime晚于specifiedTime!");
        }
        if(localTime.isBefore(specifiedTime)) {
            System.out.println("localTime早于specifiedTime!");
        }
    }
    

    运行结果:

    localTime早于specifiedTime!
    

    对时间做加减运算
    代码示例:

    LocalTime localTime = LocalTime.now();
    System.out.println("当前时间:" + localTime);
    System.out.println("2小时后时间:" + localTime.plusHours(2));
    System.out.println("30分钟后时间:" + localTime.plusMinutes(30));
    System.out.println("500秒后日时间:" + localTime.plusSeconds(500));
            
    System.out.println("2小时前时间:" + localTime.minusHours(2));
    System.out.println("30分钟前时间:" + localTime.minusMinutes(30));
    System.out.println("500秒前时间:" + localTime.minusSeconds(500));
    

    运行结果:

    当前时间:14:10:15.666
    2小时后时间:16:10:15.666
    30分钟后时间:14:40:15.666
    500秒后时间:14:18:35.666
    
    2小时前时间:12:10:15.666
    30分钟前时间:13:40:15.666
    500秒前时间:14:01:55.666
    

    LocalDateTime类

    LocalDateTime是一个不可变的日期-时间对象,它既包含了日期同时又含有时间,默认格式是yyyy-MM-ddTHH-mm-ss.zzz
    获取当前日期时间以及自定义日期时间
    示例代码:

     //获取当前的日期时间
    LocalDateTime localDateTime = LocalDateTime.now();
    System.out.println("当前的日期时间:" + localDateTime);
    
    //获取自定义的的日期时间
    LocalDateTime specifiedDateTime = LocalDateTime.of(LocalDate.now(), LocalTime.now());
    System.out.println("自定义的日期时间:" + specifiedDateTime);
    

    运行结果:

    当前的日期时间:2018-12-12T14:31:00.163
    自定义的日期时间:2018-12-12T14:31:00.164
    

    转化为日期和时间
    代码示例:

    //转化为LocalDate和LocalTime
    LocalDate localDate = localDateTime.toLocalDate();
    LocalTime localTime = localDateTime.toLocalTime();
    System.out.println("当前日期:" + localDate);
    System.out.println("当前时间:" + localTime);
    

    运行结果:

    当前日期:2018-12-12
    当前时间:14:31:00.163
    
  • 相关阅读:
    问答
    正在设计taijilang的解析器,真可谓尸横遍地
    因为这些理由而坚持用grunt?其实它们都不成立。
    开始设计taijijs
    从grunt转到gulp
    google 索引
    :: operator
    用coffeescript写构造函数
    jade与angular.js
    angular.js 资料收集
  • 原文地址:https://www.cnblogs.com/liantdev/p/10108504.html
Copyright © 2011-2022 走看看