04-常用API-01(Java.util包)

前言

  • 本篇主要说 java.util 包下的类
    • (主要介绍Arrays类、日期时间)
  • 注意:在java.util.包下,可以直接 类名. 调用,无需创建对象

一、Arrays类

  • 内部都是静态方法
  • Arrays的常用方法:
    在这里插入图片描述

二、工具类

  • 工具类设计思想
    1. 构造方法用 private 修饰
    2. 成员用 public static 修饰

三、日期时间

3.1 Data类

3.1.1 Data类概念

  • 时间

    世界标准时间 (格林威治时间Greenwich Mean Time) 简称GMT

    中国(东八区)标准时间: 世界标准时间+8小时

  • 计算机中的时间原点

    1970年1月1日 00:00:00

  • 时间换算单位

    1秒 = 1000毫秒

  • Date类概述

    Date 代表了一个特定的时间,精确到毫秒

  • Date类 (java.uill.包下的Data) 构造方法

    方法名说明
    public Date()分配一个 Date对象,并初始化,以便它代表它被分配的时间,精确到毫秒
    public Date(long date)分配一个 Date对象,并将其初始化为表示从标准基准时间起指定的毫秒数
  • 示例代码

    public class DateDemo01 {
        public static void main(String[] args) {
            //public Date():分配一个 Date对象,并初始化,以便它代表它被分配的时间,精确到毫秒
            Date d1 = new Date();
            System.out.println(d1);
    
            //public Date(long date):分配一个 Date对象,并将其初始化为表示从标准基准时间起指定的毫秒数
            long date = 1000*60*60;
            Date d2 = new Date(date);
            System.out.println(d2);
        }
    }
    
  • 方法一:public Date()
    在这里插入图片描述

  • 方法二:public Date(long date)
    在这里插入图片描述

3.1.2 Date类常用方法

  • 内部的方法大部分为非静态,需要创建Date的对象来调用

  • 常用方法

    方法名说明
    public long getTime()获取的是日期对象从1970年1月1日 00:00:00到现在的毫秒值
    public void setTime(long time)设置时间(重设当前的时间)
    给的是毫秒值
    • public long getTime();与System类(笔记day13)中的方法——>System.currentTimeMillis(); 的打印结果一样
      在这里插入图片描述
  • 示例代码

    public class DateDemo02 {
        public static void main(String[] args) {
            //创建日期对象
            Date d = new Date();
    
            //public long getTime():获取的是日期对象从1970年1月1日 00:00:00到现在的毫秒值
    //        System.out.println(d.getTime());
    //        System.out.println(d.getTime() * 1.0 / 1000 / 60 / 60 / 24 / 365 + "年");
    
            //public void setTime(long time):设置时间,给的是毫秒值
    //        long time = 1000*60*60;
            long time = System.currentTimeMillis();
            d.setTime(time);
    
            System.out.println(d);
        }
    }
    

3.2 Data类日期解析与格式化

3.2.1 SimpleDateFormat类

  • SimpleDateFormat类概述

    ​ SimpleDateFormat是一个具体的类,用于以区域设置敏感的方式格式化和解析日期
    在这里插入图片描述

  • 我们重点学习日期格式化和解析

    • 格式化 (创建的)时间对象------->时间字符串
    • 解析 时间字符串------->时间对象
  • 日期和时间模式:
    在这里插入图片描述

  • SimpleDateFormat类构造方法

    方法名说明
    public SimpleDateFormat()构造一个SimpleDateFormat
    使用默认模式和日期格式
    public SimpleDateFormat(String pattern)构造一个SimpleDateFormat使用给定的模式和默认的日期格式
  • SimpleDateFormat类的常用方法

    • 格式化(从Date到String)
    • 用 .format(Date date) 方法
      • public final String format(Date date):将日期格式化成日期/时间字符串
        在这里插入图片描述
  • 解析(从String到Date)

  • 用 .parse(String source)方法

    • public Date parse(String source):从给定字符串的开始解析文本以生成日期
      在这里插入图片描述
  • 解析为时间的对象,还原为没有使用构造方法的初始
    在这里插入图片描述

  • 使用SimpleDateFormat类中parse方法的注意事项:

  • 1、自定义的格式要与字符串的相同才能进行解析,且必须自定义格式,不能使用默认格式了,不然会出现ParseException异常

  • 2、SimpleDateFormat类中parse方法是一个非静态的方法,非静态方法是需要用对象来调用的

  • 3、问题:格式不一致导致无法解析
    在这里插入图片描述

  • 解决:

  • 重新定义一个规定格式的字符串
    在这里插入图片描述

3.3 时间日期类练习

  • 需求

    秒杀开始时间是2020年11月11日 00:00:00

    结束时间是2020年11月11日 00:10:00

    用户小贾下单时间是2020年11月11日 00:03:47

    用户小皮下单时间是2020年11月11日 00:10:11

    判断用户有没有成功参与秒杀活动

  • 实现步骤

    1. 判断下单时间是否在开始到结束的范围内
    2. 把字符串形式的时间变成毫秒值
  • 代码实现

    public class DateDemo5 {
        public static void main(String[] args) throws ParseException {
            //开始时间:2020年11月11日 0:0:0
            //结束时间:2020年11月11日 0:10:0
    
            //小贾2020年11月11日 0:03:47
            //小皮2020年11月11日 0:10:11
    
            //1.判断两位同学的下单时间是否在范围之内就可以了。
    
            //2.要把每一个时间都换算成毫秒值。
    
            String start = "2020年11月11日 0:0:0";
            String end = "2020年11月11日 0:10:0";
    
            String jia = "2020年11月11日 0:03:47";
            String pi = "2020年11月11日 0:10:11";
    
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
            long startTime = sdf.parse(start).getTime();
            long endTime = sdf.parse(end).getTime();
    
    //        System.out.println(startTime);
    //        System.out.println(endTime);
            long jiaTime = sdf.parse(jia).getTime();
            long piTime = sdf.parse(pi).getTime();
    
            if(jiaTime >= startTime && jiaTime <= endTime){
                System.out.println("小贾同学参加上了秒杀活动");
            }else{
                System.out.println("小贾同学没有参加上秒杀活动");
            }
    
            System.out.println("------------------------");
    
            if(piTime >= startTime && piTime <= endTime){
                System.out.println("小皮同学参加上了秒杀活动");
            }else{
                System.out.println("小皮同学没有参加上秒杀活动");
            }
    
        }
      
    }
    

3.4 JDK8新增日期类

由于一些问题用旧的Date类去解决会比较繁琐,因此扩展出JDK8时间日期类去解决一些问题
  • 示例对比
  • 需求:定义时间字符串”2025年11月11日 00:00:00 “ 将这个时间+1天,再按照原来格式输出
  • 主函数使用新旧两个方法做对比
    在这里插入图片描述
  • 使用Data类进行解题
    在这里插入图片描述
  • 使用新增JDK8新增日期类进行解题
    在这里插入图片描述

3.4.1 JDK8新增日期类基本

  • LocalDate 表示日期(年月日)
  • LocalTime 表示时间(时分秒)
  • LocalDateTime 表示时间+ 日期 (年月日时分秒)

3.4.2 LocalDateTime创建方法

  • 没有构造方法,但是可以根据以下两个方法进行调用

  • 静态方法—— 类名. 调用

  • 方法说明:

    方法名说明
    public static LocalDateTime now()获取当前系统时间
    public static LocalDateTime of (年, 月 , 日, 时, 分, 秒)使用指定年月日和时分秒初始化一个LocalDateTime对象
  • 示例代码:

    public class JDK8DateDemo2 {
        public static void main(String[] args) {
            LocalDateTime now = LocalDateTime.now();
            System.out.println(now);
    
            LocalDateTime localDateTime = LocalDateTime.of(2020, 11, 11, 11, 11, 11);
            System.out.println(localDateTime);
        }
    }
    

3.4.3 LocalDateTime获取方法

  • 方法说明:
方法名说明
public int getYear()获取年
public int getMonthValue()获取月份(1-12)
public int getDayOfMonth()获取月份中的第几天(1-31)
public int getDayOfYear()获取一年中的第几天(1-366)
public DayOfWeek getDayOfWeek()获取星期(是这周的第几天)
public int getMinute()获取分钟
public int getHour()获取小时
public int getSecond()获取秒数
  • 示例代码
public class JDK8DateDemo3 {
    public static void main(String[] args) {
        LocalDateTime localDateTime = LocalDateTime.of(2020, 11, 11, 11, 11, 20);
        //public int getYear()           获取年
        int year = localDateTime.getYear();
        System.out.println("年为" +year);
        //public int getMonthValue()     获取月份(1-12)
        int month = localDateTime.getMonthValue();
        System.out.println("月份为" + month);

        Month month1 = localDateTime.getMonth();
//        System.out.println(month1);

        //public int getDayOfMonth()     获取月份中的第几天(1-31)
        int day = localDateTime.getDayOfMonth();
        System.out.println("日期为" + day);

        //public int getDayOfYear()      获取一年中的第几天(1-366)
        int dayOfYear = localDateTime.getDayOfYear();
        System.out.println("这是一年中的第" + dayOfYear + "天");

        //public DayOfWeek getDayOfWeek()获取星期
        DayOfWeek dayOfWeek = localDateTime.getDayOfWeek();
        System.out.println("星期为" + dayOfWeek);

        //public int getMinute()        获取分钟
        int minute = localDateTime.getMinute();
        System.out.println("分钟为" + minute);
        //public int getHour()           获取小时
  
        int hour = localDateTime.getHour();
        System.out.println("小时为" + hour);
    }
}

3.4.4 LocalDateTime转换方法

  • 方法说明:
方法名说明
public LocalDate toLocalDate ()转换成为一个LocalDate对象
public LocalTime toLocalTime ()转换成为一个LocalTime对象
在这里插入图片描述

3.4.5 LocalDateTime格式化和解析

  • 新旧Date对比图解:
    在这里插入图片描述

  • 方法说明:

方法名说明
public String format (指定格式)把一个LocalDateTime格式化成为一个字符串
public LocalDateTime parse
(准备解析的字符串, 解析格式)
把一个日期字符串解析成为一个LocalDateTime对象
public static DateTimeFormatter ·ofPattern(String pattern)使用指定的日期模板获取一个日期格式化器DateTimeFormatter对象
  • 示例:

    • 格式化日期时间 (时间日期——>String)
      在这里插入图片描述

    • 解析日期时间 (String——>时间日期)

      • 使用DateTimeFormatter类中的 .parse方法时,是用 日期类名. 调用
        在这里插入图片描述

3.4.6 LocalDateTime增加、减少时间的方法

- [一 ]方法 01:增加或减少时间
方法说明:

方法名说明
public LocalDateTime plusYears (long years)添加或者减去年
public LocalDateTime plusMonths(long months)添加或者减去月
public LocalDateTime plusDays(long days)添加或者减去日
public LocalDateTime plusHours(long hours)添加或者减去时
public LocalDateTime plusMinutes(long minutes)添加或者减去分
public LocalDateTime plusSeconds(long seconds)添加或者减去秒
public LocalDateTime plusWeeks(long weeks)添加或者减去周

/* JDK8 时间类添加或者减去时间的方法如下: */

public class JDK8DateDemo6 {
    public static void main(String[] args) {
        //public LocalDateTime plusYears (long years)   添加或者减去年

        LocalDateTime localDateTime = LocalDateTime.of(2020, 11, 11, 13, 14, 15);
        //LocalDateTime newLocalDateTime = localDateTime.plusYears(1);
        //System.out.println(newLocalDateTime);

        LocalDateTime newLocalDateTime = localDateTime.plusYears(-1);
        System.out.println(newLocalDateTime);
    }
}

- [一 ]方法 02:减少或者添加时间

  • 与上面的plusXXX()方法的区别:
    在这里插入图片描述
  • 方法说明(单位相反):

    方法名说明
    public LocalDateTime minusYears (long years)减去或者添加年
    public LocalDateTime minusMonths(long months)减去或者添加月
    public LocalDateTime minusDays(long days)减去或者添加日
    public LocalDateTime minusHours(long hours)减去或者添加时
    public LocalDateTime minusMinutes(long minutes)减去或者添加分
    public LocalDateTime minusSeconds(long seconds)减去或者添加秒
    public LocalDateTime minusWeeks(long weeks)减去或者添加周
  • 示例代码:

JDK8 时间类减少或者添加时间的方法如下:

public class JDK8DateDemo7 {
    public static void main(String[] args) {
        //public LocalDateTime minusYears (long years)  减去或者添加年
        LocalDateTime localDateTime = LocalDateTime.of(2020, 11, 11, 13, 14, 15);
        //LocalDateTime newLocalDateTime = localDateTime.minusYears(1);
        //System.out.println(newLocalDateTime);

        LocalDateTime newLocalDateTime = localDateTime.minusYears(-1);
        System.out.println(newLocalDateTime);

    }
}

3.4.7 LocalDateTime修改方法

  • 方法说明

    方法名说明
    public LocalDateTime withYear(int year)直接修改年
    public LocalDateTime withMonth(int month)直接修改月
    public LocalDateTime withDayOfMonth(int dayofmonth)直接修改日期(一个月中的第几天)
    public LocalDateTime withDayOfYear(int dayOfYear)直接修改日期(一年中的第几天)
    public LocalDateTime withHour(int hour)直接修改小时
    public LocalDateTime withMinute(int minute)直接修改分钟
    public LocalDateTime withSecond(int second)直接修改秒
  • 示例代码

    /**
     * JDK8 时间类修改时间
     */
    public class JDK8DateDemo8 {
        public static void main(String[] args) {
            //public LocalDateTime withYear(int year)   修改年
            LocalDateTime localDateTime = LocalDateTime.of(2020, 11, 11, 13, 14, 15);
           // LocalDateTime newLocalDateTime = localDateTime.withYear(2048);
           // System.out.println(newLocalDateTime);
    
            LocalDateTime newLocalDateTime = localDateTime.withMonth(20);
            System.out.println(newLocalDateTime);
    
        }
    }
    

在这里插入图片描述

四、关于时间间隔的计算

4.1 Period类 ——计算年月日时间间隔

  • 方法说明:
方法名说明
public static Period between(开始时间,结束时间)计算两个“时间"的间隔
public int getYears()获得这段时间的年数
public int getMonths()获得此期间的总月数
public int getDays()获得此期间的天数
public long toTotalMonths()获取此间隔期间的总月数
  • 注意事项:
  • 只能计算年月日之间的间隔,不能计算时分秒之间的间隔
  • 必须为LocalDate类的对象
  • 如图:
    在这里插入图片描述

在这里插入图片描述

4.2 Duration类——计算时分秒时间间隔

  • 无构造方法,使用static方法Durationbetween

  • 方法说明:

方法名说明
public static Durationbetween(开始时间,结束时间)计算两个“时间"的间隔
public long toSeconds()获得此时间间隔的秒
public int toMillis()获得此时间间隔的毫秒
public int toNanos()获得此时间间隔的纳秒
  • 注意事项:

  • public static Durationbetween(开始时间,结束时间)中的参数

    • 参数类型是:Temporal
      在这里插入图片描述
    • 该参数类型是一个接口,只能通过实现类去进行传入如下:
      在这里插入图片描述
  • Period 和 Duration 的总结:

    • 相同点:都是计算两个时间的间隔 beteewn
    • 不同点: 精确单位不一样,即应用场景不一样
      • Period 精确到年月日
      • Duration精确到秒数
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值