时间日期API、Instant时间戳类、Duration、Period、时间校正器、DateTimeFormatter、ZoneID

一、JDK1.8新增的时间日期API

         * LocalDate表示年月日
         * LocalTime表示时分秒
         * LocalDateTime表示年月日时分秒
1、获取对象的方法
  1. 通过静态方法now()获取当前时间
        LocalDate now1 = LocalDate.now();
        LocalTime now2 = LocalTime.now();
        LocalDateTime now3 = LocalDateTime.now();
  1. 通过静态方法of可以设置时间
       LocalDate of1 = LocalDate.of(2008, 10, 10);
       LocalTime of2 = LocalTime.of(12, 12, 12);
       LocalDateTime of3 = LocalDateTime.of(1994, 10, 10, 1, 2, 3);
2.常用方法
  1. 有关获取的方法
LocalDateTime now = LocalDateTime.now();
    int year = now.getYear();
    Month month = now.getMonth();//获取的是哪一月,返回的是一个枚举类型
    int monthValue = now.getMonthValue();
    int dayOfMonth = now.getDayOfMonth();
    int dayOfYear = now.getDayOfYear();
  1. 格式化日期的方法
LocalDateTime now = LocalDateTime.now();
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy年MM月dd日");
        String format = now.format(formatter);
        System.out.println(format);
  1. 转换的方法
LocalDateTime now = LocalDateTime.now();
        LocalDate localDate = now.toLocalDate();
        LocalTime localTime = now.toLocalTime();
  1. 判断日期的方法
LocalDate now = LocalDate.now();
        LocalDate date = LocalDate.of(2015, 9, 6);
        //判断一个日期是在另一个日期之前还是之后
        boolean b1 = now.isBefore(date);//false
        boolean b2 = now.isAfter(date);//true
        //判断两个日期是否相等
        boolean b3 = now.isEqual(now);//true
        //判断是不是闰年
        boolean b4 = now.isLeapYear();//false
  1. 解析日期字符串
//按照默认格式解析日期字符串
        String str1="2015-06-06";
        LocalDate parse1 = LocalDate.parse(str1);

        String str2="13:04:35";
        LocalTime parse2 = LocalTime.parse(str2);

        String str3="2017-08-29T12:12:12";
        LocalDateTime parse3 = LocalDateTime.parse(str3);
        
//按照我们自己指定的格式解析字符串
        String str4="2015年06月06号";
        DateTimeFormatter pattern = DateTimeFormatter.ofPattern("yyyy年MM月dd号");
        LocalDate parse = LocalDate.parse(str4, pattern);

        String str5="06点06分06秒";
        DateTimeFormatter pattern1 = DateTimeFormatter.ofPattern("HH点mm分ss秒");
        LocalTime parse4 = LocalTime.parse(str5, pattern1);

        String str6="2015年06月06号 06点06分06秒";
        DateTimeFormatter pattern2 = DateTimeFormatter.ofPattern("yyyy年MM月dd号 HH点mm分ss秒");
        LocalDateTime parse5 = LocalDateTime.parse(str6, pattern2);
  1. 添加、减去时间量的方法
//添加年月日时分秒的方法,plus系列的方法
        //每次添加完时间量,都会返回一个新的LocalDateTime日期对象
        LocalDateTime now = LocalDateTime.now();
        LocalDateTime localDateTime = now.plusYears(1);
        LocalDateTime localDateTime1 = now.plusMonths(2);
        LocalDateTime localDateTime2 = now.plusDays(10);

//减去年月日时分秒的方法,minus系列的方法
        //每次减完时间量,也都会返回一个新的LocalDateTime日期对象
        LocalDateTime localDateTime3 = now.minusYears(1);
        LocalDateTime localDateTime4 = now.minusMonths(0);
        LocalDateTime localDateTime5 = now.minusDays(1);
  1. 设置年月日时分秒的方法,with系列
//LocalDateTime.of()
        LocalDateTime now = LocalDateTime.now();
     //with系列
        LocalDateTime localDateTime = now.withDayOfMonth(10);
        LocalDateTime with = now.with(TemporalAdjusters.firstDayOfMonth());
        LocalDateTime with1 = now.with(TemporalAdjusters.firstDayOfNextMonth());
        LocalDateTime with2 = now.with(TemporalAdjusters.next(DayOfWeek.FRIDAY));

二、Instant时间戳类

Instant时间戳类从1970-01-01 00:00:00截止到当前时间的毫秒值

  1. 获取对象的方法:now()
        Instant now = Instant.now();
        System.out.println(now);
        //默认取出来的是当前的美国时间,和我们相差8小时
  1. 设置偏移量的方法:atOffset()
        Instant now = Instant.now();
        OffsetDateTime offsetDateTime = now.atOffset(ZoneOffset.ofHours(8));
        //ZoneOffset设置偏移时间
  1. 获取系统默认时区时间的方法:atZone()
        //ZoneId世界时区编号的一个类
        Instant now = Instant.now();
        //atzone()方法的参数是要一个时区的编号可以通过时区编号类ZoneId获取出来
        ZonedDateTime zonedDateTime = now.atZone(ZoneId.systemDefault());
        //ZoneId.systemDefault()获取本地的默认时区ID

获取任意时区时间的方法

        Instant now = Instant.now();
        ZoneId of = ZoneId.of("Asia/Shanghai");
        ZonedDateTime zonedDateTime = now.atZone(of);
        System.out.println(zonedDateTime);
  1. get系列的方法
Instant now = Instant.now();
        long epochSecond = now.getEpochSecond();//获取从1970-01-01 00:00:00到当前时间的秒值
        long l = now.toEpochMilli();//获取从1970-01-01 00:00:00到当前时间的毫秒值

  1. ofEpochSecond()方法、ofEpochMilli()
//ofEpochSecond()方法 给计算机元年增加秒数
//ofEpochMilli() 给计算机元年增加毫秒数
        Instant instant = Instant.ofEpochMilli(1000 * 60 * 60);
        Instant instant1 = Instant.ofEpochSecond(5);

三、Duration、Period

Duration : 用于计算两个“时间”间隔的类

//Duration可以计算两个时间的间隔
        Instant start = Instant.now();
        for (int i = 0; i < 100000; i++) {
            System.out.println(" ");
        }
        Instant end = Instant.now();
        //静态方法between()计算两个时间的间隔,默认是秒
        Duration between = Duration.between(start, end);
        //Duration中的toMillis()方法:将秒转为毫秒
        long l = between.toMillis();
        System.out.println(l);

Period : 用于计算两个“日期”间隔的类

//Period用于计算两个日期的间隔
        LocalDate start = LocalDate.of(2015, 9, 1);
        LocalDate end = LocalDate.of(2019, 9, 1);
        //Period中的静态方法between()
        Period between = Period.between(start, end);
        int years = between.getYears();//间隔了多少年
        int months = between.getMonths();//间隔了几个月
        int days = between.getDays();//间隔类多少天

四、TemporalAdjuster 时间校正器:设置日期

1.按照系统系统的方式设置日期
        LocalDate now = LocalDate.now();
        //TemporalAdjuster时间校正器,是个接口
        LocalDate with = now.with(TemporalAdjusters.next(DayOfWeek.FRIDAY));
        System.out.println(with);

        TemporalAdjuster temporalAdjuster = TemporalAdjusters.nextOrSame(DayOfWeek.FRIDAY);
        LocalDate with1 = now.with(temporalAdjuster);
        System.out.println(with1);
2.按照自定义方式设置日期
public static void main(String[] args) {
        //采用自定义方式来指定日期。比如下个工作日
        //今天如果时星期五 下个工作日 +3
        //今天如果时星期六 下个工作日 +2
        //其他 +1
        LocalDate now = LocalDate.now();
        LocalDate newDate = now.with(new TemporalAdjuster() {
            @Override
            public Temporal adjustInto(Temporal temporal) {
                //temporal当前日期
                //向下转型
                LocalDate localDate= (LocalDate) temporal;
                //获取当前日期是星期几
                DayOfWeek dayOfWeek = localDate.getDayOfWeek();
                if(dayOfWeek.equals(DayOfWeek.FRIDAY)){
                    LocalDate localDate1 = localDate.plusDays(3);
                    return localDate1;
                }else if(dayOfWeek.equals(DayOfWeek.SATURDAY)){
                    LocalDate localDate1 = localDate.plusDays(2);
                    return localDate1;
                }else{
                    LocalDate localDate1 = localDate.plusDays(1);
                    return localDate1;
                }
            }
        });
        System.out.println(newDate);
    }

五、DateTimeFormatter :解析和格式化日期或时间的类

1.把日期对象转化为字符串
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy年MM月dd日");
        LocalDate now = LocalDate.now();
        //方式1 可以使用DateTimeFormatter 他的format()
        String format = formatter.format(now);
        System.out.println(format);

        //方式2  使用 LocalDate 的format方法
        String format1 = now.format(formatter);
        System.out.println(format1);

        //使用自带的格式
        String format2 = now.format(DateTimeFormatter.ISO_DATE);
        System.out.println(format2);
2.把字符串解析成日期对象
//按照系统自定义的转换规格
        String str="2018-10-10";
        LocalDate parse = LocalDate.parse(str);
        System.out.println(parse);
//自定义转换规格
        String str1="2015年05月12日";
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy年MM月dd日");
        LocalDate parse1 = LocalDate.parse(str1, formatter);
        System.out.println(parse1);

六、带时区的时间或日期ZonedDate、ZonedTime、ZonedDateTime

用法和 LocalDate、 LocalTime、 LocalDateTime 一样 只不过ZonedDate,ZonedTime、ZonedDateTime 这三个带有当前系统的默认时区

1、ZoneID 世界时区类
ZoneId.getAvailableZoneIds();//获取世界各个地方的时区的集合
ZoneId.systemDefault();//获取系统默认时区的ID
  1. 获取带有时区的日期对象
//方式1
        LocalDateTime now = LocalDateTime.now();//创建日期对象
        ZoneId zoneId = ZoneId.of("Asia/Shanghai");//根据各个地区的时区ID创建对象
        ZonedDateTime dateTime = now.atZone(zoneId);//通过时区ID获取带有时区的日期对象
        System.out.println(dateTime);

//方式2:通过时区ID获取日期对象
        LocalDateTime now1 = LocalDateTime.now(ZoneId.of("Asia/Shanghai"));
        System.out.println(now1);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值