java基础入门-11-【API(时间,包装类,练习)】

20、API(时间,包装类,练习)

在这里插入图片描述

  • JDK7时间相关类
  • JDK8时间相关类
  • 包装类
  • 综合练习
  • Collection集合

第一章 Date类

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

1.1 Date概述

在这里插入图片描述
在这里插入图片描述

java.util.Date类 表示特定的瞬间,精确到毫秒。

继续查阅Date类的描述,发现Date拥有多个构造函数,只是部分已经过时,我们重点看以下两个构造函数

  • public Date():从运行程序的此时此刻到时间原点经历的毫秒值,转换成Date对象,分配Date对象并初始化此对象,以表示分配它的时间(精确到毫秒)。
  • public Date(long date):将指定参数的毫秒值date,转换成Date对象,分配Date对象并初始化此对象,以表示自从标准基准时间(称为“历元(epoch)”,即1970年1月1日00:00:00 GMT)以来的指定毫秒数。

tips: 由于中国处于东八区(GMT+08:00)是比世界协调时间/格林尼治时间(GMT)快8小时的时区,当格林尼治标准时间为0:00时,东八区的标准时间为08:00。

简单来说:使用无参构造,可以自动设置当前系统时间的毫秒时刻;指定long类型的构造参数,可以自定义毫秒时刻。例如:

import java.util.Date;

public class Demo01Date {
   
    public static void main(String[] args) {
   
        // 创建日期对象,把当前的时间
        System.out.println(new Date()); // Tue Jan 16 14:37:35 CST 2020
        // 创建日期对象,把当前的毫秒值转成日期对象
        System.out.println(new Date(0L)); // Thu Jan 01 08:00:00 CST 1970
    }
}
public class DateDemo1 {
   
    public static void main(String[] args) {
   
        /*
            public Date()           创建Date对象,表示当前时间
            public Date(long date)  创建Date对象,表示指定时间

            public void settime(long time)  设置/修改毫秒值
            public long gettime()           获取时间对象的毫秒值
        */

        //1.创建对象表示一个时间
        Date d = new Date();//系统当前时间
        System.out.println("d = " + d);//d = Thu May 18 09:20:01 CST 2023

        //2.创建对象表示一个指定的时间
        Date d2 = new Date(0L);//时间原点
        System.out.println("d2 = " + d2);//d2 = Thu Jan 01 08:00:00 CST 1970

        //3.setTine修改时间
        //1000毫秒 = 1秒
        d2.setTime(1000L);
        System.out.println("d2 = " + d2);//d2 = Thu Jan 01 08:00:01 CST 1970

        //4.getTime获取当前时间的毫秒值
        long time = d2.getTime();
        System.out.println("time = " + time);//time = 1000

    }
}
public class DateDemo2 {
   
    public static void main(String[] args) {
   
        /*
            需求1: 打印时间原点开始一年之后的时间
            需求2: 定义任意两个Date对象,比较一下哪个时间在前,哪个时间在后
        */

        //需求2: 定义任意两个Date对象,比较一下哪个时间在前,哪个时间在后
        Random r = new Random();

        //两个时间对象
        Date d1 = new Date(Math.abs(r.nextInt()));
        Date d2 = new Date(Math.abs(r.nextInt()));
        System.out.println("d1 = " + d1);
        System.out.println("d2 = " + d2);
        long d1Time = d1.getTime();
        long d2Time = d2.getTime();
        if (d1Time > d2Time) {
   
            System.out.println("第一个时间在后面,第二个时间在前面");
        } else if (d1Time < d2Time) {
   
            System.out.println("第二个时间在后面,第一个时间在前面");
        } else {
   
            System.out.println("表示两个时间一样");
        }

        method();
    }

    private static void method() {
   
        //需求1: 打印时间原点开始一年之后的时间
        //1.创建一个对象,表示时间原点
        Date d1 = new Date(0L);//时间原点
        System.out.println("d1 = " + d1);//d1 = Thu Jan 01 08:00:00 CST 1970

        //2.获取d1时间的毫秒值
        long time = d1.getTime();

        //3.在这个基础上我们要加一年的毫秒值
        time = time + 1000L * 60 * 60 * 24 * 365;

        //4.把计算之后的时间毫秒值,在设置回d1当中
        d1.setTime(time);

        //5.打印d1
        System.out.println("d1 = " + d1);//d1 = Fri Jan 01 08:00:00 CST 1971
    }
}

tips:在使用println方法时,会自动调用Date类中的toString方法。Date类对Object类中的toString方法进行了覆盖重写,所以结果为指定格式的字符串。

1.2 Date常用方法

Date类中的多数方法已经过时,常用的方法有:

  • public long getTime() 把日期对象转换成对应的时间毫秒值。
  • public void setTime(long time) 把方法参数给定的毫秒值设置给日期对象

示例代码

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);
    }
}

1.3 Date–总结

在这里插入图片描述

小结:Date表示特定的时间瞬间,我们可以使用Date对象对时间进行操作。

第二章 SimpleDateFormat类

在这里插入图片描述
在这里插入图片描述

java.text.SimpleDateFormat 是日期/时间格式化类,我们通过这个类可以帮我们完成日期和文本之间的转换,也就是可以在Date对象与String对象之间进行来回转换。

  • 格式化:按照指定的格式,把Date对象转换为String对象。
  • 解析:按照指定的格式,把String对象转换为Date对象。

2.1 构造方法

在这里插入图片描述

由于DateFormat为抽象类,不能直接使用,所以需要常用的子类java.text.SimpleDateFormat。这个类需要一个模式(格式)来指定格式化或解析的标准。构造方法为:

  • public SimpleDateFormat(String pattern):用给定的模式和默认语言环境的日期格式符号构造SimpleDateFormat。参数pattern是一个字符串,代表日期时间的自定义格式。

2.2 格式规则

在这里插入图片描述

常用的格式规则为:

标识字母(区分大小写) 含义
y
M
d
H
m
s

备注:更详细的格式规则,可以参考SimpleDateFormat类的API文档。

2.3 常用方法

DateFormat类的常用方法有:

  • public String format(Date date):将Date对象格式化为字符串。

  • public Date parse(String source):将字符串解析为Date对象。

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

public class SimpleDateFormatDemo1 {
   
    public static void main(String[] args) throws ParseException {
   
        /*
            public simpleDateFormat()               默认格式
            public simpleDateFormat(String pattern) 指定格式

            public final string format(Date date)   格式化(日期对象 ->字符串)
            public Date parse(string source)        解析(字符串 ->日期对象)
        */

        //method();

        //1.定义一个字符串表示时间
        String str = "2023-11-11 11:11:11";
        //2.利用空参构造创建SimpleDateFormat对象
        //细节:
        //创建对象的格式要跟字符串的格式完全一致
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Date date = sdf.parse(str);
        //3.打印结果
        System.out.println("date = " + date); //date = Sat Nov 11 11:11:11 CST 2023
        System.out.println("date.getTime() = " + date.getTime());//date.getTime() = 1699672271000
    }

    private static void method() {
   
        //1.利用空参构造创建SimpleDateFormat对象,默认格式
        SimpleDateFormat sdf1 = new SimpleDateFormat();
        Date d1 = new Date(0L);
        String str1 = sdf1.format(d1);
        System.out.println("str1 = " + str1); //str1 = 2025/5/21 上午05:20  //str1 = 1970/1/1 上午8:00

        //2.利用带参构造创建SimpleDateFormat对象,指定格式
        SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
        String str2 = sdf2.format(d1);
        System.out.println("str2 = " + str2);  //str2 = 1970年01月01日 08:00:00

        //课堂练习: yyyy年MM月dd日 时:分:秒 星期E
        SimpleDateFormat sdf3 = new SimpleDateFormat("yyyy年MM月dd日 HH时:mm分:ss秒 EE");
        String str3 = sdf3.format(new Date());
        System.out.println("str3 = " + str3);  //str3 = 2023年05月20日 13时:14分:00秒 周四
    }
}

小结:DateFormat可以将Date对象和字符串相互转换。

2.4 练习1(初恋女友的出生日期)

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

public class SimpleDateFormatDemo2 {
   
    public static void main(String[] args) throws ParseException {
   
        /*
            假设,你初恋的出生年月日为:2000-11-11
            请用字符串表示这个数据,并将其转换为:2000年11月11日

            创建一个Date对象表示2000年11月11日
            创建一个SimpleDateFormat对象,并定义格式为年月日
            把时间变成:2000年11月11日
        */

        //1.可以通过2000-11-11进行解析,解析成一个Date对象
        String str1 = "2000-11-11";
        //2.解析
        SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd");
        Date date = sdf1.parse(str1);
        System.out.println("date = " + date);//date = Sat Nov 11 00:00:00 CST 2000

        //3.格式化
        SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy年MM月dd日");
        String str2 = sdf2.format(date);
        System.out.println("str2 = " + str2);//str2 = 2000年11月11日
    }
}

2.5 练习2(秒杀活动)

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

public class SimpleDateFormatDemo3 {
   
    public static void main(String[] args) throws ParseException {
   
         /* 需求:
            秒杀活动开始时间:2023年11月11日 0:0:0(毫秒值)
            秒杀活动结束时间:2023年11月11日 0:10:0(毫秒值)

            小贾下单并付款的时间为:2023年11月11日 0:01:0
            小皮下单并付款的时间为:2023年11月11日 0:11:0
            用代码说明这两位同学有没有参加上秒杀活动?
         */

        //比较两个时间

        //1.解析时间得到毫秒值
        String startstr = "2023年11月11日 0:0:0";
        String endstr = "2023年11月11日 0:10:0";
        String orderstr1 = "2023年11月11日 0:01:0";
        String orderstr2 = "2023年11月11日 0:11:0";

        method(startstr, endstr, orderstr1);
        method(startstr, endstr, orderstr2);
    }

    private static void method(String startstr, String endstr, String orderstr) throws ParseException {
   
        //2.解析上面的三个时间,得到Date
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
        Date startDate = sdf.parse(startstr);
        Date endDate = sdf.parse(endstr);
        Date orderDate = sdf.parse(orderstr);

        //3.得到三个时间的毫秒值
        long startDateTime = startDate.getTime();
        long endDateTime = endDate.getTime();
        long orderDateTime = orderDate.getTime();

        //4.判断
        if (orderDateTime >= startDateTime && orderDateTime <= endDateTime) {
   
            System.out.println("参加秒杀活动成功");
        } else {
   
            System.out.println("参加秒杀活动失败");
        }
    }
}

在这里插入图片描述

2.6 SimpleDateFormat–总结

在这里插入图片描述

第三章 Calendar类

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.1 概述

  • java.util.Calendar类表示一个“日历类”,可以进行日期运算。它是一个抽象类,不能创建对象,我们可以使用它的子类:java.util.GregorianCalendar类。
  • 有两种方式可以获取GregorianCalendar对象:
    • 直接创建GregorianCalendar对象;
    • 通过Calendar的静态方法getInstance()方法获取GregorianCalendar对象

3.2 常用方法

方法名 说明
public static Calendar getInstance() 获取一个它的子类GregorianCalendar对象。
public int get(int field) 获取某个字段的值。field参数表示获取哪个字段的值,
可以使用Calender中定义的常量来表示:
Calendar.YEAR : 年
Calendar.MONTH :月
Calendar.DAY_OF_MONTH:月中的日期
Calendar.HOUR:小时
Calendar.MINUTE:分钟
Calendar.SECOND:秒
Calendar.DAY_OF_WEEK:星期
public void set(int field,int value) 设置某个字段的值
public void add(int field,int amount) 为某个字段增加/减少指定的值

3.3 get方法示例

public class Demo {
   
    public static void main(String[] args) {
   
        //1.获取一个GregorianCalendar对象
        Calendar instance = Calendar.getInstance();//获取子类对象

        //2.打印子类对象
        System.out.println(instance);

        //3.获取属性
        int year = instance.get(Calendar.YEAR);
        int month = instance.get(Calendar.MONTH) + 1;//Calendar的月份值是0-11
        int day = instance.get(Calendar.DAY_OF_MONTH);

        int hour = instance.get(
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

良辰美景好时光

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

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

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

打赏作者

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

抵扣说明:

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

余额充值