Java在手,世界我有!!!Java中日期时间类——Date类、DateFormat类(SimpleDateFormat子类)与Calendar类

Date类

概述

java.util.Date是表示日期和时间的类。 Date类表示特定的瞬间(一个时间点,一刹那时间),精确到毫秒,(1000毫秒=1秒)。毫秒值的可以对时间和日期进行计算。还要清楚一个概念:时间原点。
时间原点(0毫秒)指的是1970年1月1日 00:00:00,这是英国格林威治的时间,需要注意,中国属于东八区,会把时间增加8个小时,也就是: 1970年1月1日 08:00:00。
把毫秒转换为日期:毫秒数/86400000 =天数。
1天 = 24 × 60 × 60 =86400 秒 =86400 × 1000 =86400000 毫秒、

Date类的常用构造方法

(1)Date类的空参数构造方法:Data()获取的就是当前系统的日期和时间
(2)Date类的带参数构造方法:Date(long date):传递毫秒值,把毫秒值转换为Date日期

代码举例

import java.util.Date;

public class Demo02Date {
    public static void main(String[] args) {
        
        //(1)Date类的空参数构造方法:Data()获取的就是当前系统的日期和时间
        Date date=new Date();
        System.out.println(date);       //Sat Aug 22 16:17:15 CST 2020

        //(2)Date类的带参数构造方法:Date(long date) :传递毫秒值,把毫秒值转换为Date日期
        Date date1=new Date(0L);
        System.out.println(date1);      //Thu Jan 01 08:00:00 CST 1970

        //(2)Date类的带参数构造方法:Date(long date) :传递毫秒值,把毫秒值转换为Date日期
        Date date2=new Date(15811111111L);
        System.out.println(date2);      //Fri Jul 03 07:58:31 CST 1970
    }
}

Date类的常用成员方法

long getTime():把日期转换为毫秒(相当于System.currentTimeMillis()) 返回自 1970 年 1 月 1 日 00:00:00 GMT 以来此 Date 对象表示的毫秒数。

代码举例

public class Demo02Date {
    public static void main(String[] args) {
        Date date3=new Date();
        long time=date2.getTime();       //15811111111
        System.out.println(time);       //15811111111
    }
}

DateFormat类

概述

java.text.DateFormat是日期/时间【格式化】子类的抽象类。
作用有两个: 格式化(日期 -> 文本)、解析(文本-> 日期)
注意:SimpleDateFormat类是一个抽象类,继承于(extends) DateFormat类。

SimpleDateFormat类的常用构造方法

SimpleDateFormat(String pattern) :用给定的模式和默认语言环境的日期格式符号构SimpleDateForma。
参数:
String pattern:传递指定的模式模式:区分大小写的
y 年
M 月
d 日
H 时
m 分
s 秒
例如:"yyyy-MM-dd HH:mm:ss" 或者"yyyy年MM月dd日 HH时mm分ss秒"。【注意】模式中的字符不能更改,连接模式的符号可以改变

DateFormat类的常用成员方法

【1】String format(Date date):按照指定的模式,将一个Date格式化为符合模式的日期/时间字符串。
【使用步骤】
①创建SimpleDateFormat对象,构造方法中传递指定的模式
②调用SimpleDateFormat中的format方法,按照构造方法中指定的模式,将Date日期格式转化为符合模式的字符串(文本)

代码举例

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

public class Demo03Format {
    public static void main(String[] args) {
        //1.创建SimpleDateFormat对象,构造方法中传递指定的模式
        //SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        SimpleDateFormat sdf=new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒");
        Date date=new Date();
        //2.调用SimpleDateFormat中的format方法,按照构造方法中指定的模式,将Date日期格式转化为符合模式的字符串(文本)
        String str=sdf.format(date);        
        System.out.println(date);           //2020年08月22日 17时30分01秒
        System.out.println(str);
    }
}

【2】Date parse(String source):把符合模式的字符串,解析为Date日期
注意:DateFormat类是一个抽象类,无法直接创建对象使用,可以使用DateFormat的子类SimpleDateFormat
【使用步骤】
①创建SimpleDateFormat对象,构造方法中传递指定的模式
②调用SimpleDateFormat对象中的方法parse,把符合构造方法中模式的字符串,解析为日期
【注意】public Date parse(String source) throws ParseException``
parse方法声明了一个异常叫ParseException解析异常,如果参数字符串和构造方法中的模式不一样,那么程序就会抛出此异常。调用一个抛出了异常的方法,就必须的处理这个异常,要么throws继续声明抛出这一个异常,要么try...catch自己处理这个异常。

代码举例

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

public class Demo04Parse {
    public static void main(String[] args) throws ParseException {
        //1.创建SimpleDateFormat对象,构造方法中传递指定的模式
        SimpleDateFormat sdf=new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒");
        //2.调用SimpleDateFormat对象中的方法parse,把符合构造方法中模式的字符串,解析为日期
        Date date=sdf.parse("2020年08月22日 17时30分01秒");
        System.out.println(date);       //Sat Aug 22 17:30:01 CST 2020
    }
}

日期相关API小练习

问题描述:请使用日期时间相关的API,计算出一个人已经出生了多少天。
思路:
1.获取当前时间对应的毫秒值
2.使用Scanner类中的方法next获取自己出生日期
3.使用DateFormat类中的方法parse,把字符串的出生日期解析为Date格式
4.把Date格式的出生日期转换为毫秒值
5.使用当前日期的毫秒值-出生日期的毫秒值
6.把毫秒值的差值转换为天(s/1000/60/60/24)

代码实现

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

public class Demo05DateExer {
    public static void main(String[] args) throws ParseException {
        //  2.使用Scanner类中的方法next获取自己出生日期
        System.out.println("请输入出生日期,格式为:yyyy-MM-dd");
        Scanner scan=new Scanner(System.in);
        String str=scan.next();
        //  3.使用DateFormat类中的方法parse,把字符串的出生日期解析为Date格式
        SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
        Date birthDate=sdf.parse(str);
        // 4.把Date格式的出生日期转换为毫秒值
        Long birth=birthDate.getTime();
        // 1.获取当前时间对应的毫秒值
        //long current=new Date().getTime();
        Long current=System.currentTimeMillis();
        //  5.使用当前日期的毫秒值-出生日期的毫秒值
        Long s=current-birth;
        //  6.把毫秒值的差值转换为天(s/1000/60/60/24)
        System.out.println(s/1000/60/60/24);
    }
}

Calendar类

概述

java.util.Calendar类是一个日历类。Calendar 类是一个抽象类,为操作日历字段(YEAR、MONTH、DAY_OF_MONTH、HOUR 等)提供了一些方法。Calendar类无法直接创建对象使用,里面有一个静态方法叫做getInstance(),该方法返回了Calendar类的子类对象。
Calendar rightNow = Calendar.getInstance();
Calendar类中提供很多成员常量,代表给定的日历字段:

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

Calendar类的常用成员方法

【1】-public int get(int field)``:返回给定日历字段的值。
参数:int field,传递指定的日历字段(Year,Month…)
返回值:日历字段代表的具体的值

代码举例

import java.util.Calendar;

public class Demo02Calendar {
    public static void main(String[] args) {

        //使用getInstance方法获取Calendar对象
        Calendar c=Calendar.getInstance();
        //获取年份
        int year=c.get(Calendar.YEAR);
        System.out.println(year);       		//2020
		//获取月份
        int month=c.get(Calendar.MONTH);
        System.out.println(month+1);     		 //西方的月份0-11,东方的月份1-12   8
		//获取日
        //int date=c.get(Calendar.DATE);      		//22
        int date=c.get(Calendar.DAY_OF_MONTH);      //22
        System.out.println(date);
    }
}

【2】-public void set(int field, int value)``:将给定的日历字段设置为给定值。、
参数:
int field:传递指定的日历字段(Year,Month…)
int value:传递的字段设置的具体值

代码举例

import java.util.Calendar;

public class Demo03CalendarSet {
    public static void main(String[] args) {

        //使用getInstance方法获取Calendar对象
        Calendar c=Calendar.getInstance();

        //设置年为9999
        c.set(Calendar.YEAR,9999);
        
        //设置月为9
        c.set(Calendar.MONTH,9);

        //设置日为9
        c.set(Calendar.DATE,9);

        //同时设置年月日,可以使用set的重载方法
        c.set(8888,8,8);
    }
}

【3】-public abstract void add(int field, int amount)``:根据日历的规则,为给定的日历字段添加或减去指定的时间量。
参数:
int field:传递指定的日历字段(Year,Month…)
int amount:增加/减少的值
正数:增加
负数:减少

代码举例

import java.util.Calendar;

public class Demo04CalendarAdd {
    public static void main(String[] args) {
        //使用getInstance方法获取Calendar对象
        Calendar c=Calendar.getInstance();

        //把年增加2年
        c.add(Calendar.YEAR,2);

        //把月减少3个月
        c.add(Calendar.MONTH,-2);
    }
}

【4】-public Date getTime()``:返回一个表示此Calendar时间值(从历元到现在的毫秒偏移量)的Date对象。

代码举例

import java.util.Calendar;
import java.util.Date;

public class Demo05CalendarGeTime {
    public static void main(String[] args) {
        //使用getInstance方法获取Calendar对象
        Calendar c=Calendar.getInstance();
        Date date=c.getTime();     
        System.out.println(date);	 //Sat Aug 22 21:00:31 CST 2020
    }
}
Date类、DateFormat类与Calendar类的常见的使用方法小编就介绍到这里了,希望能对在看的您有所帮助!!!

欢迎来语雀看看