Java进阶(第七期):Java 时间API、Date类、日历类、日期格式化类、时间类、工具类(获取时间间隔)根据JDK版本的差异进行了描述、适合需求开发的时候直接使用

跨越山海,终见曙光!

保持了爱,奔赴山海!

2023年12月23日22:29:052023年12月24日10:50:24 加油啊!

Java进阶(第七期)

文章目录

  • Java进阶(第七期)
    • java中的时间类API
    • 一、 jdk8(之前)
          • 1.1.1 Date 类
          • 1.1.2 SimpleDateFormat 类
          • 1.1.3 日期小练习
          • 1.1.4 Calendar 类
          • 1.1.5 Calendar 小练习
          • 1.1.6 综合小练习
    • 二、jdk8 (+)
        • 2.1 日历类
        • 2.2 修改年月日时分秒相关方法
        • 2.3 toLOcalDate 和 toLocalTime 方法
        • 2.4 (日期格式化类)DateTimeFormatter类
        • 2.5 时间类
          • 2.5.1 Instant 时间戳
          • 2.5.2 ZooneDateTime 时区对象
        • 2.6 工具类
        • 2.7 练习

java中的时间类API

一、 jdk8(之前)

1.1.1 Date 类

Java进阶(第七期):Java 时间API、Date类、日历类、日期格式化类、时间类、工具类(获取时间间隔)根据JDK版本的差异进行了描述、适合需求开发的时候直接使用_第1张图片

Java进阶(第七期):Java 时间API、Date类、日历类、日期格式化类、时间类、工具类(获取时间间隔)根据JDK版本的差异进行了描述、适合需求开发的时候直接使用_第2张图片

  • 代表的是时间和日期
package com.liujintao.data;

import java.util.Date;

public class DataDemo01 {
    public static void main(String[] LiuJinTao) {
        // 1、Date 构造方法
        
        // 无参构造
        Date d1 = new Date();   // 将当前的日期时间,这封装为 Date 日期对象 (内部肯定重写了toString())
        System.out.println(d1); // Sat Dec 23 22:47:33 CST 2023
        
        // 带参构造 实参为long类型
        Date d2 = new Date(0L);   // 时间原点
        System.out.println(d2);   // Thu Jan 01 08:00:00 CST 1970
        
        Date d3 = new Date(5000L);
        System.out.println(d3);   // Thu Jan 01 08:00:05 CST 1970
        
        System.out.println("-------------------------------------------------");
        // 2、常用的方法
        Date d4 = new Date();
        System.out.println(d4.getTime());   // 1703343443732
        
        d4.setTime(10000L); // 将当前的日期设置为时间原点为基础的时间日期
        System.out.println(d4);     // Thu Jan 01 08:00:10 CST 1970
    }
}

1.1.2 SimpleDateFormat 类

Java进阶(第七期):Java 时间API、Date类、日历类、日期格式化类、时间类、工具类(获取时间间隔)根据JDK版本的差异进行了描述、适合需求开发的时候直接使用_第3张图片

package com.liujintao.data;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class DateDemo02 {
    public static void main(String[] LiuJinTao) throws ParseException {
        // SimpleDateFormat()类的构造方法的使用
        System.out.println("-------------------空参构造---------------------------");
        // 空参构造:创建一个日期格式化对象,(默认格式)
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat();     // 初始化实例对象
        
        Date date = new Date(); // 获取当前时间日期
        
        // 常用方法1: format
        System.out.println(simpleDateFormat.format(date));     // 23-12-23 下午11:18
        
        System.out.println("-------------------空参构造---------------------------");
        
        
        
        System.out.println("-------------------带参构造----------------------------");
        
        String today = "2023年12月23日";
        
        SimpleDateFormat simpleDateFormat2 = new SimpleDateFormat("yyyy年MM月dd日");
        
        // 常用方法2: parse
        Date date1 = simpleDateFormat2.parse(today);
        
        System.out.println(date1);      // Sat Dec 23 00:00:00 CST 2023
        System.out.println("-------------------带参构造----------------------------");
    }
}

Java进阶(第七期):Java 时间API、Date类、日历类、日期格式化类、时间类、工具类(获取时间间隔)根据JDK版本的差异进行了描述、适合需求开发的时候直接使用_第4张图片

1.1.3 日期小练习

需求:根据用户输入的生日,得到用户来到这个世界上的天数。

    public static void main (String[] LiuJinTao) throws ParseException {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入您的生日:(格式:xxxx年xx月xx日)");
        
        String birthday = sc.next();
        
        // 1、创建 SimpleDateFormat 实例对象
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy年MM月dd日");
        
        // 2、将用户获取的生日字符串转为日期对象
        Date birthdayDate = simpleDateFormat.parse(birthday);
        
        // 3、获取今天的日期对象 (使用 Date 无参构造即可)
        Date today = new Date();
        
        // 4、将日期对象转为 时间毫秒数(时间戳), 然后将今天的时间戳 - 生日的时间戳
        long time1 = today.getTime();
        long time2 = birthdayDate.getTime();
        long time = time1 - time2;
        System.out.println("您来了这个世界上已经" + time / 1000 / 60 / 60 / 24);
    }
1.1.4 Calendar 类

Calender c = Caleender.getInstance() 方法创建实例对象

Java进阶(第七期):Java 时间API、Date类、日历类、日期格式化类、时间类、工具类(获取时间间隔)根据JDK版本的差异进行了描述、适合需求开发的时候直接使用_第5张图片

Java进阶(第七期):Java 时间API、Date类、日历类、日期格式化类、时间类、工具类(获取时间间隔)根据JDK版本的差异进行了描述、适合需求开发的时候直接使用_第6张图片

Java进阶(第七期):Java 时间API、Date类、日历类、日期格式化类、时间类、工具类(获取时间间隔)根据JDK版本的差异进行了描述、适合需求开发的时候直接使用_第7张图片

  • 常用方法
        // Calendar 是个抽象类,不想重写方法,创建实例只能调用它身上的getInstance()方法。
        Calendar c = Calendar.getInstance();
        
        // 类中的常用方法 (当前时间: 2023年12月24日01:20:18)
        System.out.println(c.get(Calendar.YEAR)); // 2023 通过 get 方法调用 该抽象类中的静态方法(获取年份)
        System.out.println(c.get(Calendar.MONTH) + 1);  // 获取月份 12
        System.out.println(c.get(Calendar.DAY_OF_MONTH));   // 获取日 24
        
        c.set(Calendar.YEAR, 2024);
        System.out.println(c.get(Calendar.YEAR)); // 2024
        
        c.add(Calendar.YEAR, 1);
        System.out.println(c.get(Calendar.YEAR));   // 2025
        
        c.add(Calendar.YEAR, -1);
        System.out.println(c.get(Calendar.YEAR));   // 2024
1.1.5 Calendar 小练习
  • 需求: 判断 2035年 5 月 20 日是不是疯狂星期四
    public static void main(String[] LiuJinTao) {
        // 需求: 判断 2035年 5 月  20 日是不是疯狂星期四
        
        // 1. 通过Calendar 类 修改年份
        Calendar c = Calendar.getInstance();
//        c.set(Calendar.YEAR, 2035);
//        System.out.println(c.get(Calendar.YEAR));
//
//        // 2. 设置月份
//        c.set(Calendar.MONTH, 5);
//        System.out.println(c.get(Calendar.MONTH));
//
//        // 3. 设置日
//        c.set(Calendar.DAY_OF_MONTH, 20);
//        System.out.println(c.get(Calendar.DAY_OF_MONTH));
        
        c.set(2035, 4, 20); // 这里调用 set方法,记得月份从0开始
        // 3.获取星期
        String[] weeks = {"", "星期天", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"};
        int weekIndex = c.get(Calendar.DAY_OF_WEEK);
        System.out.println(weekIndex);
        if (weeks[weekIndex].equals("星期四")) {
            System.out.println("2035年5月20日是疯狂星期四!");
        } else {
            System.out.println("2035年5月20日不是疯狂星期四!");
        }
    }
1.1.6 综合小练习
  • 需求:用户输入一个日期,判断当期日期是该年的第几天
    public static void main(String[] LiuJinTao) throws ParseException {
        /**
         * 需求:用户输入一个日期,判断当期日期是该年的第几天
         */
        
        // 1. 获取用户输入的日期
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入一个日期:(xxxx年xx月xx日)");
        String inputDate = sc.next();
        
        // 2. 将用户输入的日期,转为 Date 日期对象类型
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy年MM月dd日");
        Date date = simpleDateFormat.parse(inputDate);
        
        // 3. 设置改日期对象为用户输入的日期
        Calendar c = Calendar.getInstance();
        c.setTime(date);
        int dayInYear = c.get(Calendar.DAY_OF_YEAR);
        System.out.println(inputDate + "是该年份的第:" + dayInYear + "天");
        
        
        /*
            输出示例:
                    请输入一个日期:(xxxx年xx月xx日)
                    2023年1月1日
                    2023年1月1日是该年份的第:1天

         */
    }

二、jdk8 (+)

Java进阶(第七期):Java 时间API、Date类、日历类、日期格式化类、时间类、工具类(获取时间间隔)根据JDK版本的差异进行了描述、适合需求开发的时候直接使用_第8张图片

Java进阶(第七期):Java 时间API、Date类、日历类、日期格式化类、时间类、工具类(获取时间间隔)根据JDK版本的差异进行了描述、适合需求开发的时候直接使用_第9张图片

2.1 日历类

Java进阶(第七期):Java 时间API、Date类、日历类、日期格式化类、时间类、工具类(获取时间间隔)根据JDK版本的差异进行了描述、适合需求开发的时候直接使用_第10张图片

    public static void main (String[] args) {
        // jdk8 版本后的日期对象的使用
        
        
        // 1. 获取此刻的时间对象
        LocalDateTime now = LocalDateTime.now();
        System.out.println(now);
        
        System.out.println("------------------------------------------------");
        
        System.out.println(now.getYear() + "年");        // 2023年
        System.out.println(now.getMonthValue() + "月");  // 12月
        System.out.println(now.getDayOfMonth() + "日");  // 24日
        System.out.println(now.getHour() + "时");        // 8时
        System.out.println(now.getMonthValue() + "分");  // 12分
        System.out.println(now.getSecond() + "秒");      // 12秒
        System.out.println(now.getNano() + "纳秒");      // 463000000纳秒
        
        System.out.println("-----------------------------------------");
        
        // 获取指定的时间对象
        LocalDateTime of = LocalDateTime.of(2024, 12, 24, 5, 20);
        System.out.println(of);                 // 2024-12-24T05:20
    }
}
2.2 修改年月日时分秒相关方法

Java进阶(第七期):Java 时间API、Date类、日历类、日期格式化类、时间类、工具类(获取时间间隔)根据JDK版本的差异进行了描述、适合需求开发的时候直接使用_第11张图片

        // LocalDateTime 、 LocalDate 、 LocalTime 都是不可变的,想要对其进行改变,就得使用下面的方法, 有返回值。
        
        // 1、获取当前的时间
        LocalDateTime now = LocalDateTime.now();
        System.out.println(now.getYear());  // 2023
        LocalDateTime of = LocalDateTime.of(2023, 12, 24, 5, 20);
        System.out.println(of);             // 2023-12-24T05:20
        
        
        // 2、使用withYear设置年份  返回修改年份的日期时间对象
        LocalDateTime localDateTime = now.withYear(2024);
        System.out.println(localDateTime);      // 2024-12-24T08:34:13.477
        
        
        // 3、使用 plusYear 增加年份,返回新的日期时间对象
        LocalDateTime localDateTime1 = now.plusYears(1);
        System.out.println(localDateTime1);     // 2024-12-24T08:35:56.474
        
        
        // 4、使用 minusYear 减小年份, 返回新的日期时间对象
        LocalDateTime localDateTime2 = now.minusYears(1);
        System.out.println(localDateTime2);     // 2022-12-24T08:38:43.372
        
        // 5、equals 比较两个时间日期对象是否相等
        boolean resultBoolean = now.equals(localDateTime2);
        System.out.println(resultBoolean);      // false
        
        // 6、isBefore 比较日期对象是否在调用者之前
        boolean before = now.isBefore(localDateTime2);
        System.out.println(before);             // false
        
        // 7、isAfter 比较日期对象是否在调用者之后
        boolean after = now.isAfter(localDateTime2);
        System.out.println(after);              // true
        
    }
2.3 toLOcalDate 和 toLocalTime 方法

Java进阶(第七期):Java 时间API、Date类、日历类、日期格式化类、时间类、工具类(获取时间间隔)根据JDK版本的差异进行了描述、适合需求开发的时候直接使用_第12张图片

2.4 (日期格式化类)DateTimeFormatter类

Java进阶(第七期):Java 时间API、Date类、日历类、日期格式化类、时间类、工具类(获取时间间隔)根据JDK版本的差异进行了描述、适合需求开发的时候直接使用_第13张图片

    public static void main(String[] LiuJinTao) {
        
        LocalDateTime now = LocalDateTime.now();
        System.out.println("格式化之前的时间为:" + now); // 格式化之前的时间为:2023-12-24T10:05:58.785
        
        // 获取格式化对象
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy年MM月dd日");
        
        // 格式化
        String result = formatter.format(now);
        System.out.println("格式化之后的时间为:" + result);  // 格式化之后的时间为:2023年12月24日
        
        // 解析
        String time = "2023年12月24日";
        LocalDate parse = LocalDate.parse(time, formatter); // 2023-12-24
        System.out.println(parse);
    }
2.5 时间类
2.5.1 Instant 时间戳

Java进阶(第七期):Java 时间API、Date类、日历类、日期格式化类、时间类、工具类(获取时间间隔)根据JDK版本的差异进行了描述、适合需求开发的时候直接使用_第14张图片

2.5.2 ZooneDateTime 时区对象

Java进阶(第七期):Java 时间API、Date类、日历类、日期格式化类、时间类、工具类(获取时间间隔)根据JDK版本的差异进行了描述、适合需求开发的时候直接使用_第15张图片

2.6 工具类
  • ChronoUnit掌握这个就可以了
LocalDate daDay = LocalDate.now();

LocalDateTime  birthDate = LocalDateTime().of(2023, 12, 25, 0, 0, 0);

上面获取了当前时间对象和指定的时间对象,使用ChronoUnit对象里面的静态方法,调用between方法,得到两个时间对象之间的间隔!

Java进阶(第七期):Java 时间API、Date类、日历类、日期格式化类、时间类、工具类(获取时间间隔)根据JDK版本的差异进行了描述、适合需求开发的时候直接使用_第16张图片

2.7 练习

​ + 需求:键盘录入用户的生日,计算出用户的实际年龄

    public static void main (String[] LiuJinTao) {
        // 需求:键盘录入用户的生日,计算出用户的实际年龄
        Scanner sc = new Scanner(System.in);
        
        // 1. 将键盘输入的日期字符串,转为我们日期对象
        System.out.println("请输入您的生日(格式:yyyy年M月d日):");
        String birthday = sc.next();
        LocalDate birthdayDate = LocalDate.parse(birthday, DateTimeFormatter.ofPattern("yyyy年M月d日"));
        
        
        // 2. 获取今天的
        LocalDate now = LocalDate.now();
        
        
        // 3. 计算时间间隔(参数二 - 参数一)
        long result = ChronoUnit.YEARS.between(birthdayDate, now);
        System.out.println(result  + "岁");
    }
    /*
          输出示例:
                    输入:2004年10月19日
                    输出:19岁
                  此时此刻:(通宵备赛)2023年12月24日10:46:15   十九岁,加油!希望在元旦过后的新的2024年,一月,人工智能竞赛取得好名次!
     */

跨越山海,终见曙光!

保持了爱,奔赴山海!


你可能感兴趣的:(Java进阶,java,python,开发语言)