Date类

JDK8时间类

以下代码的各类导包:

import java.time.ZoneId;
import java.util.Set;
import java.time.Instant;
import java.time.ZonedDateTime;
import java.time.LocalDateTime;
import java.time.temporal.ChronoUnit;
import java.time.format.DateTimeFormatter;
import java.time.DayOfWeek;
import java.time.LocalDate;
import java.time.Month;
import java.time.MonthDay;
import java.time.LocalDate;
import java.time.LocalTime;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Calendar;

获取时区信息

    public static void main(String[] args) {

        //获取所有时区的名称
        Set<String> zoneIds= ZoneId.getAvailableZoneIds();
        System.out.println(zoneIds.size());
        System.out.println(zoneIds);  //Asia/Shanghai

        //获取系统的默认时区
        ZoneId zoneId=ZoneId.systemDefault();
        System.out.println(zoneId);  //Asia/Shanghai

        //获取一个指定时区
        ZoneId zoneId1=ZoneId.of("Etc/GMT+9");
        System.out.println(zoneId1);


    }

获取某一时刻的时间对象 Instant类

    public static void main(String[] args) {
        /*
            static Instant now() 获取当前时间的Instant对象(标准时间)
            static Instant ofXxxx(long epochMilli)  根据(秒/毫秒/纳秒)获取Instant对象
            ZonedDateTime atZone(ZoneId zone)  指定时区
            boolean isXxx(Instant otherInstant)  判断系列的方法
            Instant minusXxx(long millisToSubtract)  减少时间系列的方法
            Instant plusXxx(long millisToSubtract)  增加时间系列的方法
         */

        //获取当前时间的Instant对象(标准时间)
        Instant now= Instant.now();
        System.out.println(now);    //2023-04-04T07:31:39.912326Z

        //根据(秒/毫秒/纳秒)获取Instant对象
        Instant instant1=Instant.ofEpochMilli(0L);
        System.out.println(instant1);   //1970-01-01T00:00:00Z

        Instant instant2=Instant.ofEpochSecond(1l);
        System.out.println(instant2);   //1970-01-01T00:00:01Z

        Instant instant3=Instant.ofEpochSecond(1l,1000000000l);
        System.out.println(instant3);   //1970-01-01T00:00:02Z


        //指定时区
        ZonedDateTime time=Instant.now().atZone(ZoneId.of("Asia/Shanghai"));
        System.out.println(time);   //2023-04-04T15:31:39.916325800+08:00[Asia/Shanghai]

        //isXxx 判断
        Instant instant4=Instant.ofEpochMilli(0L);
        Instant instant5=Instant.ofEpochMilli(1000l);

        boolean result1=instant4.isBefore(instant5);   //判断instant4是否在instant5之前
        System.out.println(result1);    //true
        System.out.println(instant4.isAfter(instant5));  //判断instant4是否在instant5之后  false

        //
        Instant instant6=Instant.ofEpochMilli(3000L);
        System.out.println(instant6);   //1970-01-01T00:00:03Z

        Instant instant7=instant6.minusSeconds(1);  //在instant6的时间上减去1s
        System.out.println(instant7);   //1970-01-01T00:00:02Z

    }

获取带时区的时间对象 ZonedDateTime类

    public static void main(String[] args) {

        /*
            static ZonedDateTime now()  //获取当前时间的ZonedDateTime对象
            static ZonedDateTime ofXxxx()   //获取指定时间的ZonedDateTime对象
            ZonedDateTime WITHxXX(时间)   //修改时间系列的方法
            ZonedDateTime minusXxx(时间)  //减少时间
            ZonedDateTime plusXxx(时间)   //增加时间

         */


        //获取当前时间对象(带时区)
        ZonedDateTime zdt= ZonedDateTime.now();
        System.out.println(zdt);

        //获取指定的时间对象(带时区)
        //年月时分秒纳秒方式指定
        ZonedDateTime time1=ZonedDateTime.of(2023,10,1,11,
                12,12,0, ZoneId.of("Asia/Shanghai"));
        System.out.println(time1);

        //通过Instant+时区的方式获取时间对象
        Instant instant=Instant.ofEpochMilli(0L);
        ZoneId zoneId=ZoneId.of("Asia/Shanghai");
        ZonedDateTime time2=ZonedDateTime.ofInstant(instant,zoneId);
        System.out.println(time2);

        //withXxx 修改时间系列的方法
        ZonedDateTime time3=time2.withYear(2000);
        System.out.println(time3);

        //减少或者增加时间
        ZonedDateTime time4=time3.minusYears(1);
        ZonedDateTime time5=time3.plusYears(1);
        System.out.println(time4);
        System.out.println(time5);


        //JDK8增的时间对象都是不可变的
        //如果我们修改了时间
        //那么调用者是不会改变的,而是产生了一个新的时间


    }

获取时间的日历对象 LocalDate(侧重于年月日)、LocalTime(侧重于时分秒)、LocalDateTime(年月日时分秒)

    public static void main(String[] args) {

        //获取当前时间的日历对象(包含年月日)
        LocalDate nowDate= LocalDate.now();
        System.out.println(nowDate);    //2023-04-04

        //获取指定的时间的日历对象
        LocalDate ldDate=LocalDate.of(2023,1,1);
        System.out.println("指定日期:"+ldDate); //指定日期:2023-01-01

        //get方法获取日历中的每一个属性值
        //获取年
        int year=ldDate.getYear();
        System.out.println(year);   //2023

        //获取月
        Month m=ldDate.getMonth();
        System.out.println(m);  //JANUARY
        System.out.println(m.getValue());  //获取数字的月  1

        //获取日
        System.out.println(ldDate.getDayOfMonth()); //1

        //获取星期
        DayOfWeek dayOfWeek=ldDate.getDayOfWeek();
        System.out.println(dayOfWeek);  //SUNDAY
        System.out.println(dayOfWeek.getValue()); //获取星期的数字  7

        //is开头的方法表示判断
        System.out.println(ldDate.isBefore(nowDate));   //true
        System.out.println(ldDate.isAfter(nowDate));    //false

        //with开头的方法表示修改,只能修改年月日
        LocalDate withLocalDate=ldDate.withYear(2000);
        System.out.println(withLocalDate);  //2000-01-01

        //minus/plus 开头的方式表示减少/增加,只能对年月日修改
        System.out.println(ldDate.minusYears(1));   //2022-01-01  对年修改
        System.out.println(ldDate.plusMonths(2));   //2023-03-01    对月修改


        //判断今天是否是你的生日
        LocalDate birthday=LocalDate.of(2002,1,14);
        LocalDate daynow=LocalDate.now();

        //判断今年的月日是否和你的出生月日相同
        //MonthDay 表示月日对象
        MonthDay birMd=MonthDay.of(birthday.getMonthValue(),birthday.getDayOfMonth());
        MonthDay nowMd=MonthDay.from(daynow);

        System.out.println("今天是你生日吗"+birMd.equals(nowMd));  //今天是你生日吗false

    }
    public static void main(String[] args) {

        //获取本地的日历对象(时分秒)
        LocalTime lt=LocalTime.now();
        System.out.println(lt);

        int hour=lt.getHour();
        int minute=lt.getMinute();
        int second=lt.getSecond();
        int nano=lt.getNano();
        System.out.println("现在的时间是"+hour+": "+minute+": "+second);

        System.out.println(LocalTime.of(8,10,20)); //08:10:20

        //is系列、with、minus、plus和LocalDate一致



    }
    public static void main(String[] args) {

        LocalDateTime nowDateTime= LocalDateTime.now();
        System.out.println(nowDateTime);

        //星期
        System.out.println(nowDateTime.getDayOfWeek());
        //月份
        System.out.println(nowDateTime.getMonth());


        //把LocalDateTime对象转化为LocalDate或者LocalTime对象
        LocalDate ld= nowDateTime.toLocalDate();
        LocalTime lt=nowDateTime.toLocalTime();
        System.out.println(ld);
        System.out.println(lt);

    }

判断两个时间的间隔

用ChronoUnit方法

    public static void main(String[] args) {
        //当前时间
        LocalDateTime today= LocalDateTime.now();
        System.out.println(today);

        //生日时间
        LocalDateTime birthday=LocalDateTime.of(2002,1,14,0,30,12);
        System.out.println(birthday);

        long year= ChronoUnit.YEARS.between(birthday,today);
        System.out.println(year);  //相差的年份
        System.out.println(ChronoUnit.MONTHS.between(birthday,today));  //相差的月份
        System.out.println(ChronoUnit.WEEKS.between(birthday,today));  //相差的周数
        System.out.println(ChronoUnit.DAYS.between(birthday,today));  //相差的天数
        System.out.println(ChronoUnit.HOURS.between(birthday,today));  //相差的小时数
        System.out.println(ChronoUnit.DECADES.between(birthday,today));  //相差的十年数

    }

练习:

JDK7版本的Date类已经不再使用,有兴趣者可以自行学习

    public static void main(String[] args) throws ParseException {

        //用代码计算你活了多少天,用JDK7和JDK8方式来完成

        //JDK7
        //规则:只要对时间进行计算或者判断,都需要先获取当前时间的毫秒值

        //计算出出生年月日的毫秒值
        String birthday="2002年1月1日";
        SimpleDateFormat sdf= new SimpleDateFormat("yyyy年MM月dd日");
        Date date=sdf.parse(birthday);
        long birthdayTime=date.getTime();


        //当前时间
        long todayTime=System.currentTimeMillis();

        //计算间隔多少天
        long time=todayTime-birthdayTime;
        System.out.println(time/1000/60/60/24);  //7763

        //JDK8
        // Period  Duration  ChronoUnit
        LocalDate today1= LocalDate.now();
        LocalDate birthday1=LocalDate.of(2002,1,1);

        long days= ChronoUnit.DAYS.between(birthday1,today1);
        System.out.println(days);  //7763


    }

    public static void main(String[] args) {
        //判断任意一个年份是闰年还是平年
        //一年366天或者2月份是29天是闰年
        //用JDK7和JDK8的方式判断


        //JDK7
        //把时间设置为一年的3月1日
        //再把日历往前减1天,判断是28号还是29号4
        Calendar c= Calendar.getInstance();
        c.set(2000,2,1);  //2000年3月1日
        //把日历往前减一天
        c.add(Calendar.DAY_OF_MONTH,-1);
        int day=c.get(Calendar.DAY_OF_MONTH);
        System.out.println(day);


        //后一年的1月1号
        //往前减一天,判断是366天还是365天
        Calendar c1=Calendar.getInstance();
        c.set(2001,0,1);  //2001年1月1日
        //把日期往前减一天
        c.add(Calendar.DAY_OF_YEAR,-1);
        int day2=c.get(Calendar.DAY_OF_YEAR);
        System.out.println(day2);


        //JDK8
        //月份范围1~12
        LocalDate day3=LocalDate.of(2000,3,1);
        //往前减1天
        LocalDate day4=day3.minusDays(1);
        //获取这天是一个月中的几号
        int day5=day4.getDayOfMonth();
        System.out.println(day5);


        //true闰年
        //false平年
        //JDK8的isLeapYear()方法可以直接判断是否为闰年
        System.out.println(day3.isLeapYear());



    }

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

西柚Pi

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值