重学java 33.API 4.日期相关类

任何事,必作于细,也必成于实

                                        —— 24.5.9

一、Date日期类

1.Date类的介绍

1.概述:

        表示特定的瞬间,精确到亳秒

2.常识:

        a.1000毫秒 =1秒

        b.时间原点:1970年1月1日 0时0分0秒(UNIX系统起始时间),叫做格林威治时间,在0时区上

        c.时区:北京位于东八区,一个时区经度差15度,时间相差一个小时,所以北京时间比时间原点所在时区时间差8个小时

        d.北京经纬度:东经116北纬39.56->温带大陆性季风气候
        e.赤道本初子午线(0度经线)

2.Date类的使用

1.构造:

        Date()->获取当前系统时间
        Date(long time)-> 获取指定时间,传递亳秒值 -> 从时间原点开始算

2.示例:

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

    private static void date01() {
        // Date()->获取当前系统时间
        Date date = new Date();
        System.out.println("Date():"+date);
        // Date(long time)-> 获取指定时间,传递亳秒值 -> 从时间原点开始算
        Date data1 = new Date(1000);
        System.out.println("Date(1000):"+data1);
    }

3.Date类的常用方法

        1.void setTime(long time) --> 设置时间,传递亳秒值 --> 从时间原点开始算

        2.long getTime() --> 获取时间,返回亳秒值

示例:
    public static void main(String[] args) {
        date02();
    }

    private static void date02() {
        Date date = new Date();
        // 1.void setTime(long time) --> 设置时间,传递亳秒值 --> 从时间原点开始算
        date.setTime(1000);
        // 2.long getTime() --> 获取时间,返回亳秒值
        System.out.println(date.getTime());
    }

二、Calender日历类

1.概述:

        日历类,抽象类

2.获取Calendar中的方法:

getinstance

        static calendar getInstance()

import java.util.Calendar;

public class Demo180Calender {
    public static void main(String[] args) {
        calender();
    }

    private static void calender() {
        // 构造方法
        Calendar calendar = Calendar.getInstance();
        System.out.println(calendar);
    }
}

3.月份对比:

国外:0 1 2 3 4 5 6 7 8 9 10 11

国内:1 2 3 4 5 6 7 8 9 10 11 12

字段值                                                含义
YEAR                                                   年                         
MONTH                                    月(从0开始,可以+1使用)
DAY_OF_MONTH                       月中的天(几号)
HOUR                                           时(12小时制)
HOUR_OF DAY                            时(24小时制)
MINUTE                                               分
SECOND                                             秒
DAY_OF_WEEK                周中的天(周几,周日为1,可以-1使用)

4.常用方法

        ① int get(int field)->返回给定日历字段的值
        ② void set(int field,int value) :将给定的日历字段设置为指定的值

        ③ void add(int field,int amount):根据日历的规则,为给定的日历字段添加或者减去指定的时间量

        ④ Date getTime():将calendar转成Date对象

   private static void calender01() {
        Calendar calendar = Calendar.getInstance();// 多态
        //        ① int get(int field)->返回给定日历字段的值
        int year = calendar.get(Calendar.YEAR);
        System.out.println("year1:"+year);

        //        ② void set(int field,int value) :将给定的日历字段设置为指定的值
        calendar.set(Calendar.YEAR,2027);
        System.out.println("year2:"+calendar.get(Calendar.YEAR));

        //        ③ void add(int field,int amount):根据日历的规则,为给定的日历字段添加或者减去指定的时间量
        calendar.add(Calendar.YEAR,-1);
        System.out.println("year3:"+calendar.get(Calendar.YEAR));

        //        ④ Date getTime():将calendar转成Date对象
        Date date = Calendar.getInstance().getTime();
        System.out.println("date = "+date);
    }

5.扩展方法

void set(int year,int month,int date) --> 直接设置年月日


需求:键盘输入一个年份,判断这一年是闰年,还是平年

步骤:

        1.创建Calendar对象
        2.创建scanner对象,键盘录入一个年份
        3.调用set方法,传递年,月,日,set(年,2,1)->国外是0-11,所以设置成2月就是代表3月
        4.将day减1天(3月1日减1天,就是2月最后一天,知道2月最后一天了,就知道是平年还是闰年了)

        5.获取day判断平年还是闰年,输出结果

    private static void calender03() {
        // 1.创建Calendar对象
        Calendar calendar = Calendar.getInstance();
        // 2.创建Scanner对象,键盘录入一个年份
        Scanner sc = new Scanner(System.in);
        int year = sc.nextInt();
        // 3.调用set方法,传递年,月,日,set(年,2,1)->国外是0-11,所以设置成2月就是代表3月
        calendar.set(year,2,1);
        // 4.将day减1天(3月1日减1天,就是2月最后一天,知道2月最后一天了,就知道是平年还是闰年了)
        calendar.add(Calendar.DATE,-1);
        int day = calendar.get(Calendar.DATE);
        // 5.获取day判断平年还是闰年,输出结果
        if(day == 29){
            System.out.println(year+"是闰年");
        }else{
            System.out.println(year+"是平年");
        }
    }

三、SimpleDateFormat日期格式化类

1.概述

        格式化日期的类

2.构造

        SimpleDateFormat(String pattern)

3.Pattern代表:

        代表的是我们自己指定的日期格式,字母不能改变,但是中间的连接符可以改变

        yyyy-MM-dd HH:mm:ss

        y:年 M:月 dd:日 HH:时 mm:分 ss:秒

4.常用方法

        1.String format(Date date) --> 将Date对象按照指定的格式转成String字符串

        2.Date parse(String source) --> 将符合目期格式的String字符串转成Date对象

5.示例

    public static void main(String[] args) throws ParseException {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        // 1.String format(Date date) --> 将Date对象按照指定的格式转成String
        String time1 = sdf.format(new Date());
        System.out.println("time1 = "+time1);
        // 2.Date parse(String source) --> 将符合目期格式的字符串转成Date对象
        String time2 = "2002-11-04 11:30:31";
        // 3.处理异常
        Date date = sdf.parse(time2);
        System.out.println("date = "+date);
    }

四、JDK8新日期类

1.LocalDate本地日期

1.概述:

        LocalDate是一个不可变的日期时间对象,表示日期,通常被视为年月日

2.获取:

        static LocalDate now() --> 创建LocalDate对象
        static LocalDate of(int year,int month,int dayofMonth) --> 创建LocalDate对象,设置 年月日时分秒

        示例:
    public static void main(String[] args) {
        // static LocalDate now() --> 创建LocalDate对象
        LocalDateTime localDateTime = LocalDateTime.now();
        System.out.println(localDateTime);
        // static LocalDate of(int year,int month,int dayofMonth) --> 创建LocalDate对象,设置 年月日
        LocalDateTime localDateTime1 = LocalDateTime.of(2002,11,4,10,10,10);
        System.out.println(localDateTime1);
    }

3.获取日期字段的方法:名字get开头

        ① int getYear() --> 获取年份
        ② int getMonthvalue() --> 获取月份
        ③ int getDayofMonth() --> 获取月中的第几天

        示例:
    public static void main(String[] args) {
        LocalDate localDate = LocalDate.now();
        // ① int getYear() --> 获取年份
        System.out.println(localDate.getYear());
        // ② int getMonthvalue() --> 获取月份 getMonth获取的是枚举,getMonthValue获取的是具体的日子
        System.out.println(localDate.getMonthValue());
        // ③ int getDayofMonth() --> 获取月中的第几天
        System.out.println(localDate.getDayOfMonth());
    }

4.设置日期字段的方法:名字是with开头

        LocalDate withYear(int year):设置年份
        LocalDate withMonth(int month):设置月份
        LocalDate withDayofMonth(int day):设置月中的天数

        示例:
    private static void with() {
       // LocalDate withYear(int year):设置年份
        LocalDate localDate = LocalDate.now();
        LocalDate localDate1 = localDate.withYear(2002);
        System.out.println(localDate1);
       // LocalDate withMonth(int month):设置月份
        LocalDate localDate2 = localDate.withMonth(11);
        System.out.println(localDate2);
       // LocalDate withDayofMonth(int day):设置月中的天数
        LocalDate localDate3 = localDate.withDayOfMonth(4);
        System.out.println(localDate3);

        // 链式调用赋值
        LocalDate localDate4 = localDate.withYear(2002).withMonth(11).withDayOfMonth(4);
        System.out.println(localDate4);
    }

5.日期字段偏移

设置日期字段的偏移量,方法名plus开头,向偏移

设置日期字段的偏移量,方法名minus开头,向偏移

        示例:
    private static void PlusAndMinus() {
        LocalDate localDate = LocalDate.now();
        LocalDate localDate1 = localDate.plusYears(1);
        System.out.println("localDate1 = "+ localDate1);
        LocalDate localDate2 = localDate1.minusYears(2);
        System.out.println("localDate2 = "+ localDate2);
    }

2.Period和Duration类

1.Period 计算日期之间的偏差

        方法:

        static Period between(LocalDate d1,LocalDate d2):计算两个日期之间的差值
                getyears()->获取相差的年
                getMonths()->获取相差的月
                getDays()->获取相差的天

        示例:
    private static void period() {
       // static Period between(LocalDate d1,LocalDate d2):计算两个日期之间的差值
        LocalDate local1 = LocalDate.of(2022,12,12);
        LocalDate local2 = LocalDate.of(2021, 11, 11);
        Period period = Period.between(local2,local1);
        // getrears()->获取相差的年
        System.out.println(period.getYears());
       // getMonths()->获取相差的月
        System.out.println(period.getMonths());
       // getDays()->获取相差的天
        System.out.println(period.getDays());
    }

2.Duration 计算时间之间的偏差

方法:

        1.static Duration between(Temporal startInclusive, Temporal endExclusive) --> 计算时间差

        2.Temporal:是一个接口,实现类:LocalDate、LocalDateTime
        3.参数需要传递 Temporal 的实现类对象,注意要传递 LocalDateTime

        因为Duration计算精确时间偏差,所以需要传递能操作精确时间的 LocalDateTime
        4.利用Dutation获取相差的时分秒 --> to开头
                toDays():获取相差天数
                toHours():获取相差小时
                toMinutes():获取相差分钟
                toMillis():获取相差秒(亳秒)

示例:
    private static void duration() {
            // toDays():获取相差天数
            // toHours():获取相差小时
            // toMinutes():获取相差分钟
            // toMillis():获取相差秒(亳秒)
        LocalDateTime local1 = LocalDateTime.of(2022,12,12,12,12,12);
        LocalDateTime local2 = LocalDateTime.of(2021, 11, 11,11,11,11);
        Duration duration = Duration.between(local2,local1);
        System.out.println(duration.toDays());
        System.out.println(duration.toHours());
        System.out.println(duration.toMinutes());
        System.out.println(duration.toMillis());
    }

如果计算年月日,就用Period
如果计算时分秒,就用Duration

3.DateTimeFormatter 日期格式化类

获取:

        static DateTimeFormatter ofPattern(String pattern) --> 获取对象,指定格式

方法:
    private static void format() {
        DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
        LocalDateTime localDateTime = LocalDateTime.now();
        String time = dtf.format(localDateTime);
        System.out.println("time = "+time);
    }

TemporalAccessor parse(CharSequence text) --> 将符合规则的字符串转成日期对象

                       如果想将TemporalAccesssor转成我们常见的LocalDateTime日期对象,就需要用到LocalDateTime中的静态方法:
        static LocalDateTime from(TemporalAccessor temporal)

    private static void parse() {
        DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
        String time = "2000-10-10 10:10:10";
        TemporalAccessor temporalAccessor = dtf.parse(time);
        System.out.println("temporalAccessor = "+temporalAccessor);
        LocalDateTime localDateTime = LocalDateTime.from(temporalAccessor);
        System.out.println("localDateTime = "+localDateTime);
    }
  • 22
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值