JavaSE进阶7之JDK8新增日期类

JDK8新增日期类

请添加图片描述

  • 新增的API严格区分了时刻,本地日期,本地时间,并且,对日期和时间进行运算更加方便
  • 其次,新API的类型几乎全部是不变类型(和String的使用类似),可以放心使用不必担心被修改

LocalDate、LocalTime、LocalDateTime

  • 他们分别表示日期,时间,日期时间对象,他们的类的实例是不可变的对象
  • 他们三者构建对象和API都是通用的
    请添加图片描述
public class demo8 {
    public static void main(String[] args) {
        LocalDate nowDate=LocalDate.now();
        int year=nowDate.getYear();
        int month=nowDate.getMonthValue();
        int day=nowDate.getDayOfMonth();
        System.out.println("今天的日期:"+nowDate);
        System.out.println("year:"+year);
        System.out.println("month:"+month);
        System.out.println("day:"+day);

        //当年的第几天
        int dayOf = nowDate.getDayOfYear();
        System.out.println("dayOfyear:"+dayOf);

        //星期
        DayOfWeek dayOfWeek = nowDate.getDayOfWeek();
        System.out.println(dayOfWeek);
        int week = nowDate.getDayOfWeek().getValue();
        System.out.println(week);

        LocalDate ld=LocalDate.of(2000,02,20);
        System.out.println(ld);
    }
}

请添加图片描述

转换相关的API

请添加图片描述

public class demo10 {
    public static void main(String[] args) {
        LocalDateTime nowTime=LocalDateTime.now();
        System.out.println("现在的时间是:"+nowTime);

        int year = nowTime.getYear();
        System.out.println("year:"+year);
        Month month = nowTime.getMonth();
        System.out.println("Month:"+month);
        int monthV=nowTime.getMonthValue();
        System.out.println("MonthValue:"+monthV);
        int day=nowTime.getDayOfMonth();
        System.out.println("dayOfMonth:"+day);
        int dayOfYear=nowTime.getDayOfYear();
        System.out.println("dayOfyear:"+dayOfYear);
        DayOfWeek dayOfWeek = nowTime.getDayOfWeek();
        System.out.println("dayOfWeek:"+dayOfWeek);
        int dayOfWeekV = nowTime.getDayOfWeek().getValue();
        System.out.println("dayOfWeekValue:"+dayOfWeekV);
        int hour=nowTime.getHour();
        System.out.println("hour:"+hour);
        int minute=nowTime.getMinute();
        System.out.println("minute:"+minute);
        int second=nowTime.getSecond();
        System.out.println("second:"+second);
        int nano = nowTime.getNano();
        System.out.println("nano:"+nano);

        LocalDateTime ds = LocalDateTime.of(2000, 2, 10, 15, 32, 43, 524);
        System.out.println(ds.getYear());
        System.out.println(ds.getHour());

        System.out.println("-------------------------");
        LocalDate ld=nowTime.toLocalDate();
        System.out.println("year:"+ld.getYear());
        System.out.println("month:"+ld.getMonth());
        System.out.println("day:"+ld.getDayOfMonth());

        System.out.println("-------------------------");
        LocalTime lt=nowTime.toLocalTime();
        System.out.println("hour:"+lt.getHour());
        System.out.println("minute:"+lt.getMinute());
        System.out.println("second:"+lt.getSecond());
    }
}

请添加图片描述

修改相关API

  • LocalDateTime综合了LocalDate和LocalTime里面的方法,所以下面只用LocalDate和LocalTime来举例
  • 这些方法返回的是一个新的实例引用,因为LocalDateTime,LocalDate,LocalTime都是不可变化的
    请添加图片描述
public class damo11 {
    public static void main(String[] args) {
        LocalTime nowTime= LocalTime.now();
        System.out.println(nowTime);
        System.out.println(nowTime.minusHours(1)); //1小时前
        System.out.println(nowTime.minusMinutes(1));  //1分钟前
        System.out.println(nowTime.minusSeconds(1));  //1秒钟前
        System.out.println(nowTime.minusNanos(1));    //1纳秒前

        System.out.println("------------------------------");

        System.out.println(nowTime);
        System.out.println(nowTime.plusHours(1));  //1小时后
        System.out.println(nowTime.plusMinutes(1));  //1分钟后
        System.out.println(nowTime.plusSeconds(1)); //1秒钟后
        System.out.println(nowTime.plusNanos(1));   //1纳秒后


        LocalDate setDate=LocalDate.of(2000,2,20);
        LocalDate nowDate=LocalDate.now();
        System.out.println("今天是2000年2月20日吗?"+nowDate.equals(setDate));
        System.out.println("今天在2000年2月20日前吗?"+nowDate.isBefore(setDate));
        System.out.println("今天在2000年2月20日后吗?"+nowDate.isAfter(setDate));

        //判断今天是否是你的生日生日的
        LocalDate birth=LocalDate.of(2000,2,20);
        LocalDate nowDate1=LocalDate.now();
        //获取月与日
        MonthDay birthMonDay= MonthDay.of(birth.getMonthValue(),birth.getDayOfMonth());
        MonthDay nowMonday=MonthDay.from(nowDate1);
        System.out.println("今天是否是你的生日?"+nowMonday.equals(birthMonDay));


    }
}

请添加图片描述

instant时间戳

  • jdk8获取时间戳特别简单,且功能更丰富,Instant类由一个静态的工厂方法now()可以返回当前时间戳
  • 时间戳是包含日期和时间的,与Java.util.Date很类似,事实上Instant就是类似JDK8以前的Date
  • Instant和Date这两个类可以进行转换
package com.echo.d4_javase.use_Date;

import java.time.Instant;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.util.Date;

public class demo12 {
    public static void main(String[] args) {
        Instant instant=Instant.now();
        System.out.println(instant);   //世界时间

        Instant instant1=Instant.now();
        ZonedDateTime zdt = instant1.atZone(ZoneId.systemDefault());
        System.out.println(zdt);

        //Instant 与Date 互相转换
        Date date= Date.from(instant);
        System.out.println(date);

        Instant instant2 = date.toInstant();
        System.out.println(instant2);
    }
}

请添加图片描述

DateTimeFormatter

  • 在JDK8中,引入了一个全新的日期与时间格式器的DateTimeFormatter
  • 正反都能调用format方法
package com.echo.d4_javase.use_Date;

import java.time.Instant;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.util.Date;

public class demo12 {
    public static void main(String[] args) {
        Instant instant=Instant.now();
        System.out.println(instant);   //世界时间

        Instant instant1=Instant.now();
        ZonedDateTime zdt = instant1.atZone(ZoneId.systemDefault());
        System.out.println(zdt);

        //Instant 与Date 互相转换
        Date date= Date.from(instant);
        System.out.println(date);

        Instant instant2 = date.toInstant();
        System.out.println(instant2);
    }
}

请添加图片描述

Duration/Period类

Period类

  • 在java8中,我们可以使用以下类来计算日期间隔差异:Java.time.Period
  • 主要是Period类方法getYears(),getMonths(),getDays()来计算,只能精确到年月日
  • 用于LocalDate之间的比较

Duration类

  • 在Java8中,我们可以使用以下类来计算时间间隔差异:java.time.Duration
  • 提供了使用基于时间的测量时间量的方法
  • 用于LocalDateTime之间的比较,也可用于instant之间的比较
package com.echo.d4_javase.use_Date;

import java.time.Duration;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.Period;

public class demo14 {
    public static void main(String[] args) {
        //Period类
        LocalDate nowDate= LocalDate.now();
        LocalDate birthDate=LocalDate.of(2000,2,20);

        Period p= Period.between(birthDate,nowDate);
        System.out.println("从生日那天到今天有"+p.getYears()+"年,"+p.getMonths()+"月,"+p.getDays()+"天");

        //Duration类
        LocalDateTime today=LocalDateTime.now();
        LocalDateTime birth=LocalDateTime.of(2000,2,20,19,30,27,36500);

        Duration over = Duration.between(birth, today);
        System.out.println("从生日那天到今天有"+over.toDays()+"天,"+over.toHours()+"时,"+over.toMinutes()+"分,"+over.toSeconds()+"秒,"+over.toNanos()+"纳秒");
    }
}

请添加图片描述

ChronoUnit类

java.time.temporal.ChronoUnit

  • 用于在单个时间单位内测量一段时间,可以用于比较所有的时间单位
package com.echo.d4_javase.use_Date;

import java.time.LocalDateTime;
import java.time.temporal.ChronoUnit;

public class demo15 {
    public static void main(String[] args) {
        LocalDateTime today=LocalDateTime.now();
        LocalDateTime birth=LocalDateTime.of(2000,2,20,19,30,32,1233);

        System.out.println("相差的年数:"+ChronoUnit.YEARS.between(birth,today));
        System.out.println("相差的月数:"+ChronoUnit.MONTHS.between(birth,today));
        System.out.println("相差的周数:"+ChronoUnit.WEEKS.between(birth,today));
        System.out.println("相差的天数:"+ChronoUnit.DAYS.between(birth,today));
        System.out.println("相差的时数:"+ChronoUnit.HOURS.between(birth,today));
        System.out.println("相差的分数:"+ChronoUnit.MINUTES.between(birth,today));
        System.out.println("相差的秒数:"+ChronoUnit.SECONDS.between(birth,today));
        System.out.println("相差的毫秒数:"+ChronoUnit.MILLIS.between(birth,today));
        System.out.println("相差的微妙数:"+ChronoUnit.MICROS.between(birth,today));
        System.out.println("相差的纳秒数:"+ChronoUnit.NANOS.between(birth,today));
        System.out.println("相差的半天数:"+ChronoUnit.HALF_DAYS.between(birth,today));
        System.out.println("相差的十年数:"+ChronoUnit.DECADES.between(birth,today));
        System.out.println("相差的世纪(百年)数:"+ChronoUnit.CENTURIES.between(birth,today));
        System.out.println("相差的千年数:"+ChronoUnit.MILLENNIA.between(birth,today));
        System.out.println("相差的纪元数:"+ChronoUnit.ERAS.between(birth,today));

    }
}

请添加图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值