Java中的日期时间类详解(Date、Calendar、DateFormat)

发布时间 2023-11-23 15:35:15作者: 锦湘

Hi i,m JinXiang


⭐ 前言 ⭐

本篇文章主要介绍Java时间的几种常见方法以及部分理论知识

?欢迎点赞 ? 收藏 ⭐留言评论 ?私信必回哟?

?博主收将持续更新学习记录获,友友们有任何问题可以在评论区留言


⭐什么是Date日期类型?

在JDK1.0中,Date类是唯一的一个代表时间的类,但是由于Date类不便于实现国际化,所以从JDK1.1版本开始,推荐使用Calendar类进行时间和日期处理。 从JDK 1.1开始, Calendar类应该用于在日期和时间字段之间进行转换,并且DateFormat类应用于格式化和解析日期字符串。 在相应的方法Date被弃用。

⭐Date日期类型

1、基本概念

在类的所有方法Date接受或返回年,月,日,小时,分钟和秒值,可以分配一个 Date对象,并将其初始化为表示自称为“时代”的标准基准时间以后的指定毫秒数,即1970年1月1日00:00:00GMT。

  • Date():此种形式表示分配 Date 对象并初始化此对象,以表示分配它的时间(精确到毫秒),使用该构造方法创建的对象可以获取本地的当前时间。
  • Date(long date):此种形式表示从 GMT 时间(格林尼治时间)1970 年 1 月 1 日 0 时 0 分 0 秒开始经过参数 date 指定的毫秒数。

这两个构造方法的使用示例如下:

import java.util.Date;
 
public class PhoenTest {
    /**
     * 执行入口
     * */
    public static void main(String[] args) {
        Date date1 = new Date();    // 调用无参数构造函数
        System.out.println(date1.toString());    // 输出:Thu Nov 23 10:53:51 CST 2023
        Date date2 = new Date(23000);    // 调用含有一个long类型参数的构造函数
        System.out.println(date2);    // 输出:Thu Jan 01 08:00:23 CST 1970
    }
}

Date 类的无参数构造方法获取的是系统当前的时间,显示的顺序为星期、月、日、小时、分、秒、年。

 

2、常见方法

 

方法 描述
boolean after(Date when) 判断此日期是否在指定日期之后

boolean before(Date when)

判断此日期是否在指定日期之前
int compareTo(Date anotherDate)  比较两个日期的顺序
boolean equals(Object obj)  比较两个日期的相等性
long getTime() 返回自 1970 年 1 月 1 日 00:00:00 GMT 以来,此 Date 对象表示的毫秒数
String toString()  把此 Date 对象转换为以下形式的 String: dow mon dd hh:mm:ss zzz yyyy。其中 dow 是一周中的某一天(Sun、Mon、Tue、Wed、Thu、Fri 及 Sat)

 

 下面使用实例来具体演示 Date 类的使用:

import java.util.Date;
import java.util.Scanner;
 
public class Test11 {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        System.out.println("请输入要做的事情:");
        String title = input.next();
        Date date1 = new Date(); // 获取当前日期
        System.out.println("[" + title + "] 这件事发生时间为:" + date1);
        try {
            Thread.sleep(60000);// 暂停 1 分钟
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        Date date2 = new Date();
        System.out.println("现在时间为:" + date2);
        if (date2.before(date1)) {
            System.out.println("你还有 " + (date2.getTime() - date1.getTime()) / 1000 + " 秒需要去完成【" + title + "】这件事!");
        } else {
            System.out.println("【" + title + "】事情已经过去了 " + (date2.getTime() - date1.getTime()) / 1000 + " 秒");
        }
    }
}

⭐Calendar日历类型

1、基本概念

Calendar 是一个抽象类, 无法通过直接实例化得到对象。因此, Calendar 提供了一个方法 getInstance,来获得一个Calendar对象, 得到的 Calendar 由当前时间初始化。

与其他区域设置敏感的类一样, Calendar提供了一种类方法“getInstance”,用于获取此类型的一般有用的对象。 Calendar的“getInstance”方法返回一个Calendar对象,其日历字段已使用当前日期和时间进行初始化:

Calendar c1 = Calendar.getInstance();

2、常见方法

// 获得年份
int year = c1.get(Calendar.YEAR);
// 获得月份
int month = c1.get(Calendar.MONTH) + 1;
// 获得日期
int date = c1.get(Calendar.DATE);
// 获得小时
int hour = c1.get(Calendar.HOUR_OF_DAY);
// 获得分钟
int minute = c1.get(Calendar.MINUTE);
// 获得秒
int second = c1.get(Calendar.SECOND);
// 获得星期几(注意(这个与Date类是不同的):1代表星期日、2代表星期1、3代表星期二,以此类推)
int day = c1.get(Calendar.DAY_OF_WEEK);

 

Calendar对象可以产生实现特定语言和日历风格的日期时间格式化所需的所有日历字段值(例如日语 - 公历)。 Calendar定义某些日历字段返回的值的范围及其含义。 例如,日历系统第一个月的值为MONTH == JANUARY为所有日历。 其他值由具体的子类定义,如ERA 。 有关详细信息,请参阅博客Calendar日历类型常见方法(必看!!)-CSDN博客,对Calendar进行深入技术探讨与了解!

⭐DateFormat类

1、基本概念

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

  • 格式化:按照指定的格式,从Date对象转换为String对象。(format)
  • 解析:按照指定的格式,从String对象转换为Date对象。(parse)

2、常见方法

构造方法

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

public SimpleDateFormat(String pattern):
用给定的模式和默认语言环境的日期格式符号构造SimpleDateFormat。

参数pattern是一个字符串,代表日期时间的自定义格式。

格式规则

常用的格式规则:

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

 

创建SimpleDateFormat对象的代码如下:

import java.text.DateFormat;
import java.text.SimpleDateFormat;
public class Phoen {
    @Test
    public void Test(){
          //对应的日期格式为:2023-11-11 23:10:30(区分大小写)
        DateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    }   
}

DateFormat类常用方法

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

format方法的代码如下:

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
/*
 把Date对象转换成String
*/
public class Demo03DateFormatMethod {
    public static void main(String[] args) {
        Date date = new Date();
        // 创建日期格式化对象,在获取格式化对象时可以指定风格
        DateFormat df = new SimpleDateFormat("yyyy年MM月dd日");
        String str = df.format(date);
        System.out.println(str); // 2020年09月19日
    }
}

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

parse方法的代码如下:

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
/*
 把String转换成Date对象
*/
public class Demo04DateFormatMethod {
    public static void main(String[] args) throws ParseException {
        DateFormat df = new SimpleDateFormat("yyyy年MM月dd日");
        String str = "2023年11月11日";
        Date date = df.parse(str);
        System.out.println(date); // Tue Dec 11 00:00:00 CST 2023
    }
}

总结不易,希望uu们不要吝啬亲爱的?哟(^U^)ノ~YO!!如有问题,欢迎评论区批评指正?