JDK1.8新特性

时间日期类

  1. 新增一套新的时间日期API

    1. Date,Calender的时间日期可能出现线程不安全,因此就出现了新的日期类
    2. LocalDate:表示年月日的类
    3. LocalTime:时分秒的类
    4. LocalDateTmie:年月日,时分秒的类
  2. Instant类:获取从1970.1.1.零时到现在的美国时区的毫秒值

    1. 得到的时间是美国时区,我们可以设置偏移量。
    2. 时区编号类:ZoneId类,可以获取时区
  3. 注意细节:如果用LocalDateTime 想按照我们的自定义的格式去解析,注意日期字符串的 年月日时分秒要写全,不然就报错

  4. .添加年月日时分秒的方法 plus系列的方法 都会返回一个新的LocalDateTime的对象

    ​ LocalDateTime localDateTime = ldt.plusYears(1);
    ​ LocalDateTime localDateTime1 = ldt.plusMonths(3);
    ​ LocalDateTime localDateTime2=ldt.plusHours(10);

  5. 减去年月日时分秒的方法 minus 系列的方法 注意都会返回一个新的LocalDateTime的对象
    例如:LocalDateTime localDateTime2 = ldt.minusYears(8);

  6. 指定年月日时分秒的方法 with系列的方法 注意都会返回一个新的LocalDateTime的对象
    例如 LocalDateTime localDateTime3 = ldt.withYear(1998);
    //获取这个月的第几个星期几是几号,比如 TemporalAdjusters.dayOfWeekInMonth(2, DayOfWeek.FRIDAY) 代表的意思是这个月的第二个星期五是几号
    // TemporalAdjusters.dayOfWeekInMonth(2, DayOfWeek.FRIDAY)
    LocalDateTime with1 = now.with(TemporalAdjusters.dayOfWeekInMonth(2,DayOfWeek.FRIDAY));

/*Author:LH
CreatTime:2020.06.24.16:43*/

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;

public class MyLocalDate {
    public static void main(String[] args) {
//        获取当前的时间(输出格式:2020-06-24T16:43:55.660043)
        LocalDateTime now = LocalDateTime.now();
        System.out.println(now);
//        获取日期
        System.out.println(now.getDayOfMonth());
//        获取星期日期
        System.out.println(now.getDayOfWeek());
//        获取一年中的第几天
        System.out.println(now.getDayOfYear());
        System.out.println("++++++++++");
        System.out.println(now.getMinute());
        System.out.println(now.getYear());
        System.out.println(now.getMonth());
//        将日期格式化成指定的字符串
        String format = now.format(DateTimeFormatter.ofPattern("yyyy,MM,dd  HH,mm,ss"));
        System.out.println(format);
        System.out.println("=========");
//        LocalDateTime转化成LocalDate,LocalTime
        System.out.println(now.toLocalDate());
        System.out.println(now.toLocalTime());
        System.out.println("======");
//        指定日期获取日期对象
        LocalDateTime time = LocalDateTime.of(2019, 9, 13, 13, 25, 59);
        System.out.println(time);
//        将指定字符日期解析成日期对象,注意要用英文标点,日期和时间之间用T隔开
        LocalDateTime parse = LocalDateTime.parse("1996-08-12T13:14:39");
        System.out.println(parse);
//        判断是否在一个日期之前
        boolean b = parse.isBefore(now);
        System.out.println(b);
//        判断一个日期是否在一个日期之后
        boolean after = parse.isAfter(now);
        System.out.println(after);

    }
}
/*Author:LH
CreatTime:2020.06.24.17:40*/

import java.time.Instant;
import java.time.OffsetDateTime;
import java.time.ZoneId;
import java.time.ZoneOffset;
import java.util.Set;

public class Istance {
    public static void main(String[] args) {
//        时间戳类,获取当前美国的时间
        Instant now = Instant.now();
        System.out.println(now);
//        获取从元年到现在的秒值
        System.out.println(now.getEpochSecond());
//        获取从元年到现在的毫秒值
        System.out.println(now.toEpochMilli());
        System.out.println("==========");
//        给获取到的日期增加偏移量,获取中国时间
        OffsetDateTime time = now.atOffset(ZoneOffset.ofHours(8));
        System.out.println(time);
//        获取默认系统时间的时区
        ZoneId zoneId = ZoneId.systemDefault();
        System.out.println(zoneId);
//        获取所有的时区
        Set<String> zoneIds = ZoneId.getAvailableZoneIds();
        zoneIds.forEach(s -> System.out.println(s));

//        给计算机元年增加秒数/增加毫秒值 ofEpochMilli() 给计算机元年增加毫秒数
        Instant instant = Instant.ofEpochSecond(60 * 60 * 8);
        System.out.println(instant);
    }
}

Duration类

  1. 用于计算两个时间间隔的类

Period类

  1. 计算两个日期间隔的类
/*Author:LH
CreatTime:2020.06.24.18:07*/

import java.time.LocalDate;
import java.time.LocalTime;
import java.time.Period;

public class Duration {
    public static void main(String[] args) {
//        求另个日期之间的间隔
        LocalDate now = LocalDate.now();
        System.out.println(now);
        LocalDate parse = LocalDate.parse("1996-09-25");
        System.out.println(parse);
        Period between = Period.between(now, parse);
        System.out.println(between);
//        求两个时间的间隔
        LocalTime time = LocalTime.now();
        LocalTime time1 = LocalTime.parse("08:00:00");
        java.time.Duration between1 = java.time.Duration.between(time, time1);
        System.out.println(between1);
    }
}

TemporalAdjuster 接口

  1. 时间矫正器接口,我们常用这个指定一些日期。

  2. /*Author:LH
    CreatTime:2020.06.24.22:03*/
    
    import java.time.DayOfWeek;
    import java.time.LocalDateTime;
    import java.time.temporal.Temporal;
    import java.time.temporal.TemporalAdjusters;
    
    public class TemporalAdjuster  {
        public static void main(String[] args) {
            LocalDateTime now = LocalDateTime.now();
            System.out.println(now);
    //        获取本月最后一天
            LocalDateTime with = now.with(TemporalAdjusters.lastDayOfMonth());
    //        获取下一个星期五是几号
            LocalDateTime with1 = now.with(TemporalAdjusters.next(DayOfWeek.FRIDAY));
            System.out.println(with);
            System.out.println(with1);
    
    //        下个工作日是几号
            LocalDateTime time = LocalDateTime.now();
            System.out.println(time.with(new java.time.temporal.TemporalAdjuster() {
                @Override
                public Temporal adjustInto(Temporal temporal) {
                    LocalDateTime dateTime = (LocalDateTime) temporal;
                    DayOfWeek dayOfWeek = dateTime.getDayOfWeek();
                    if (dayOfWeek.equals(DayOfWeek.FRIDAY)) {
                        return dateTime.plusDays(3);
                    } else if (dayOfWeek.equals(DayOfWeek.SATURDAY)) {
                        return dateTime.plusDays(2);
                    } else {
                        return dateTime.plusDays(1);
                    }
                }
            }));
        }
    }
    

DateTimeFormatter

  1. 获取对象的方式,通过静态方法ofPattern(“yyyy-MM-dd”);
    DateTimeFormatter dateFormat = DateTimeFormatter.ofPattern(“yyyy-MM-dd”);
    LocalDateTime now = LocalDateTime.now();

  2. format()方法把一个日期对象的默认格式 格式化成指定的格式
    String format1 = dateFormat.format(now);
    System.out.println(format1);

  3. 格式化日期 方式2使用日期类中的format方法 传入一个日期格式化类对象

  4. 使用自定义的日期格式格式化字符串
    DateTimeFormatter timeFormat = DateTimeFormatter.ofPattern(“yyyy-MM-dd HH:mm:ss”);//自定义一个日期格式
    String time = now1.format(timeFormat);
    System.out.println(time);

  5. 把一个日期字符串转成日期对象
    使用日期类中的parse方法传入一个日期字符串,传入对应的日期格式化类
    DateTimeFormatter dateFormat = DateTimeFormatter.ofPattern(“yyyy-MM-dd”);
    LocalDateTime parse = LocalDateTime.parse(time, timeFormat);
    System.out.println(parse);

Lambda表达式

  1. 可以对匿名内部类简写,简化代码。
  2. 表达式语法:
    • 箭头符号:->,这个符号将表达式分为左右两部分。
    • 左边:是你实现的这个接口中的抽象方法的形参列表。
    • 右边:你对这个抽象方法实现的具体逻辑
  3. 右边的逻辑只有一句,大括号可以省略。
  4. 左边一个参数,小括号就可以省略。
  5. 左边的数据类型也可以省略。
作为参数传递
  1. 快捷方法:可以先写成正常的匿名内部类,alt+enter转换成lambda表达式。
Lambda表达式注意事项
  1. 需要函数式接口的支持
    • 什么是函数式接口:接口里面只有一个抽象方法,@FunctionalInterface 可以检测是否是函数式接口。

代码:

  获取所有的时区
        Set<String> zoneIds = ZoneId.getAvailableZoneIds();
        zoneIds.forEach(s -> System.out.println(s));
Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐