Date类、DateFormat类、Calendar类的简单介绍

一、包的位置

  • java.util.Date;
  • java.text.DateFormat;
  • java.lang.Calendar;

二、整体概括三者的介绍

java.util.Date

  • 表示的是特定的时刻,精度为毫秒
  • 不适合国际化处理;

java.text.DateFormat

  • 日期格式化类;
  • 能够格式化Date对象为特定格式的字符串;
  • 也能将特定格式的字符串转化为Date对象;

java.lang.Calendar

  • 日历类
  • 出现在Date类后面,主要是为了解决Date类不能国际化的问题

三、Date

1、构造方法

  • 下面只记录用得上的构造方法
  • Date()
    • 无参构造方法
    • 表示当前的时间
  • Date(long date)
    • 计算1970年1月1日00:00:00GMT到date代表时刻的毫秒数
      • GMT指的是格林威治时间,中国在东八区,需要加上八个小时
      • 用人话说就是,该构造器计算的是从1970年1月1日早上八点整到传入的date代表的时间,这期间总共的毫秒数
      • 以下简称格林时间(1970年1月1日08:00:00)
    • date可以比当前时间早,也可以比当前时间晚,自定义即可

2、常用API

  • long getTime()
    • 返回格林时间到现在总共的毫秒数
  • void setTime(long time)
    • 设置此date对象为格林时间后time毫秒的时间点
public class demo {
    public static void main(String[] args) {
        //创建一个当前时间的Date
        Date date = new Date();
        //日期减一天(24小时*60分钟*60秒*1000毫秒)
        long time = date.getTime()-(24*60*60*1000);
        Date date2 = new Date(time);
        System.out.println(date);
        System.out.println(date2); //会发现日期早了一天
    }
}

Tue Nov 02 20:36:18 CST 2021
Mon Nov 01 20:36:18 CST 2021

四、DateFormat类

1、概述

  • 日期格式化类,注意这是一个抽象类
  • 要使用此类,需要通过子类SimpleDateFormat
  • 下面主要介绍子类SimpleDateFormat的用法

2、SimpleDateFormat的构造方法

  • SimpleDateFormat("日期格式字符串")
  • 日期格式字符串中一些字母的含义(常用)
    • y代表年,M代表月,d代表日
    • H代表时,m代表分,s代表秒

3、常用API

  • 首先创建一个SimpleDateFormat的对象,定义为format
  • format.format(Date date)
    • 将传入的date对象格式化成指定格式的时间字符串
    • 返回值是Sring
  • format.parse(String time)
    • 将传入的字符串转换为Date对象
    • 传入的String必须与定义SimpleDateFormat对象时的日期格式一致
    • 返回值是Date

4、应用场景及举例

  • 可以用SimpleDateFormat和Date的一些API计算某个人出生到现在总共活了多少天
package SimpleDateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class demo {
    public static void main(String[] args) throws ParseException {
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        //parse:将yyyy-MM-dd HH:mm:ss类型的字符串转化成Date对象
        Date birthday = format.parse("2000-12-09 00:00:00");
        //计算出生的天数
        System.out.println((new Date().getTime()-birthday.getTime())/1000/60/60/24);
    }
}

五、Calendar类

1、概述

  • Calendar是日历类,出现在Date类后面,解决了Date类不能国际化的问题
    • getInstance方法的源码,会根据默认的时区去创建相应的日历类(了解一下就行)
  • Calendar类是一个抽象类,不能通过new创建对象,但是可以通过getInstance方法获取Calendar对象
  • 日期信息存储在数组中,年、月、日等信息封装成了不同的常量,通过这些常量能够访问数组对应的下标,对应下标存储的就是对应的日期信息
  • 注意
    • 计算机中日历的月份是0-11,对应现实生活月份的1-12
    • 星期日是一个星期的第一天

2、常用API

static Calendar getInstance()

  • 使用默认时区和区域设置,创建日历类对象

int get (int field)

  • 返回指定的日历字段
    • 传入的field就是Calendar类中定义的常量,或者常量对应的数字
    • 通过传入的参数可以访问对应的下标志,获取对应的日期信息
      • 比如访问年(YEAR)、月(MONTH)、日(DAY)、一年中的第几天(DAY_OF_YEAR)等

void set (int field, int amount)

  • 将给定的日历字段设置为指定的值
    • 第一个参数可以传入Calendar类的常量或相应的数字,表示日期的某个字段
    • amount表示要给该日期字段设置的值
    • 注意月份是0-11,想要设置的月份-1,才是真正设置的值

abstract void add (int field, int amount)

  • 根据日历的规则,对指定的日历字段进行添加或删减操作
    • 第一个参数指的是日期的哪个字段
    • 第二个数字是要给该字段添加或删减的值
      • 比如给Calendar.YEAR添加或删减2年
        • 第一个参数就为Calendar.YEAR
        • 第二个参数是2或-2

Date getTime()

  • 返回一个Date对象,表示此Calendar的时间值

int getAutcualMaximum(int field)

  • 给定日期的字段,计算该字段的最大值
    • 比如要求某个月的最大天数,传入的参数应该为Calendar.DAY_OF_MONTH
      • 在此之前可以根据需求使用set方法设置月份,注意设置的是真实月份-1
      • 假设月份代表的是一月,则调用该方法得出的结果是31,即一月份最多有31天(最大值)

3、举例

package Calendar;
import java.util.Calendar;
import java.util.Date;
public class demo {
    public static void main(String[] args) {
        //创建日期类对象
        Calendar calendar = Calendar.getInstance();
        //get方法:根据不同的常量获取日期数组下标的值
        int year = calendar.get(Calendar.YEAR); //获取年份
        int month = calendar.get(Calendar.MONTH); //获取月份,月份是0-11,值是当前月份-1
        int day_of_year = calendar.get(Calendar.DAY_OF_YEAR); //当天是一年中的第几天
        System.out.println(day_of_year); //307
        System.out.println(year+"-"+month); //2021-10
        //set方法:设置数组下标值代表的日期的值
        calendar.set(Calendar.YEAR,2022); //设置年份为2022年
        System.out.println(calendar.get(Calendar.YEAR)); //2022
        //add方法:日期加减方法
        calendar.add(Calendar.YEAR,5); //年份+5年
        System.out.println(calendar.get(Calendar.YEAR)); //2022+5=2027
        calendar.add(Calendar.DATE,-1); //年月日的日-1天,原来是3
        System.out.println(calendar.get(Calendar.DAY_OF_MONTH)); // 3-1=2
        //getTime:获取日历时间,返回一个Date对象
        Date time = calendar.getTime();
        System.out.println(time);
        //getActualMaximum:获取指定日期的最大值
        calendar.set(Calendar.MONTH,0); //设置月份为1月
        int max1 = calendar.getActualMaximum(Calendar.DAY_OF_MONTH); //一月份的最大天数:31
        int max2 = calendar.getActualMaximum(Calendar.DAY_OF_WEEK); // 一星期最大的天数:7
        System.out.println(max1);
        System.out.println(max2);
    }
}

猜你喜欢

转载自blog.csdn.net/future_god_qr/article/details/121139149