Java中的日期与时间对象:Date类、SimpleDateFormat类、Calendar类

Java中的日期与时间的使用,系列文章:

《Java中的日期与时间对象:Date类、SimpleDateFormat类、Calendar类》

《Java中的日期与时间对象:LocalDate类、LocalTime类、LocalDateTime类》

《Java中的时区和带时区的时间对象:ZoneId类、ZonedDateTime类》

《Java中的日期与时间格式化器:DateTimeFormatter类》

《Java中的时刻与时间戳:Instant类》

《Java中的日期与时间的间隔:Period类、Duration类》

《Java使用System.currentTimeMillis()方法计算程序运行时间》

《Java时间戳的使用》​​​​​​​

java.util 包中由许多常用的类组成,其中主要是用于处理一组对象的集合类。例如 ArrayList 和 HashMap 类;它还包含用于处理日期和时间的类,例如 Date 类和 Calendar类;

1、Date 类

在 Java 中,Date 类是 java.util 包的一部分,用于表示一个特定的瞬间,精确到毫秒。这个类封装了当前的日期和时间。不过,从 Java 8 开始,引入了新的日期和时间 API(位于 java.time 包中),提供了更现代、更灵活的日期和时间处理功能。尽管如此,了解 Date 类仍然对理解 Java 早期版本中的日期和时间处理很有帮助。

Date 类的主要特性:

  1. 瞬时表示:Date 对象表示从1970年1月1日00:00:00 GMT(也称为Unix纪元或Epoch时间)开始的毫秒数。
  2. 精度:时间表示的精度取决于系统时钟的精度。
  3. 可变性:像大多数其他Java对象一样,Date 对象是可变的。这意味着一旦你创建了一个 Date 对象,你可以更改它所表示的时间(尽管这不是一个好的实践,因为它可能会导致代码中的不可预测行为)。
  4. 过时的方法:Date 类中的许多方法已经被标记为过时(deprecated),因为它们有设计上的缺陷,或者存在更好的替代方法。

Date 类的构造方法:

构造方法说明
Date()使用当天日期创建日期对象。
Date(long date)使用自1970年1月1日以后的指定毫秒数创建日期对象。
Date(int year, int month, int date)已过时。 从 JDK 1.1 开始,由 Calendar.set(year + 1900, month, date) 或 GregorianCalendar(year + 1900, month, date) 取代。
Date(int year, int month, int date, int hrs, int min)已过时。 从 JDK 1.1 开始,由 Calendar.set(year + 1900, month, date, hrs, min) 或 GregorianCalendar(year + 1900, month, date, hrs, min) 取代。
Date(int year, int month, int date, int hrs, int min, int sec)已过时。 从 JDK 1.1 开始,由 Calendar.set(year + 1900, month, date, hrs, min, sec) 或 GregorianCalendar(year + 1900, month, date, hrs, min, sec) 取代。
Date(String s)已过时。 从 JDK 1.1 开始,由 DateFormat.parse(String s) 取代。

Date 类的常用方法:

方法说明
boolean after(Date when)如果日期在指定日期之后,返回 true。
boolean before(Date when)如果日期在指定日期之前,返回 true。
boolean equals(Object obj)如果两个日期相同,返回 true。
String toString()返回日期的格式化字符串,包括星期几;形式的: dow mon dd hh:mm:ss zzz yyyy 其中: dow 是一周中的某一天 (Sun, Mon, Tue, Wed, Thu, Fri, Sat)。
long getTime()返回自1970年1月1日 00:00:00 GMT 以来此 Date 对象表示的毫秒数。
void setTime(long time)设置日期对象,以表示自1970年1月1日起的指定毫秒数。
int hashCode()返回此对象的哈希码值。
int getDate()已过时。 从 JDK 1.1 开始,由 Calendar.get(Calendar.DAY_OF_MONTH) 取代。
int getDay()已过时。 从 JDK 1.1 开始,由 Calendar.get(Calendar.DAY_OF_WEEK) 取代。
int getHours()已过时。 从 JDK 1.1 开始,由 Calendar.get(Calendar.HOUR_OF_DAY) 取代。
int getMinutes()已过时。 从 JDK 1.1 开始,由 Calendar.get(Calendar.MINUTE) 取代。
int getMonth()已过时。 从 JDK 1.1 开始,由 Calendar.get(Calendar.MONTH) 取代。
int getSeconds()已过时。从 JDK 1.1 开始,由 Calendar.get(Calendar.SECOND) 取代。
 int getTimezoneOffset()已过时。从 JDK 1.1 开始,由 -(Calendar.get(Calendar.ZONE_OFFSET) + Calendar.get(Calendar.DST_OFFSET)) / (60 * 1000) 取代。
int getYear()已过时。 从 JDK 1.1 开始,由 Calendar.get(Calendar.YEAR) - 1900 取代。
int getTimezoneOffset()已过时。 从 JDK 1.1 开始,由 -(Calendar.get(Calendar.ZONE_OFFSET) + Calendar.get(Calendar.DST_OFFSET)) / (60 * 1000) 取代。
int getYear()已过时。从 JDK 1.1 开始,由 Calendar.get(Calendar.YEAR) - 1900 取代。
static long parse(String s)已过时。 从 JDK 1.1 开始,由 DateFormat.parse(String s) 取代。
void setDate(int date)已过时。 从 JDK 1.1 开始,由 Calendar.set(Calendar.DAY_OF_MONTH, int date) 取代。
void setHours(int hours)已过时。 从 JDK 1.1 开始,由 Calendar.set(Calendar.HOUR_OF_DAY, int hours) 取代。
void setMinutes(int minutes)已过时。 从 JDK 1.1 开始,由 Calendar.set(Calendar.MINUTE, int minutes) 取代。
void setMonth(int month)已过时。 从 JDK 1.1 开始,由 Calendar.set(Calendar.MONTH, int month) 取代。
void setSeconds(int seconds)已过时。 从 JDK 1.1 开始,由 Calendar.set(Calendar.SECOND, int seconds) 取代。
void setYear(int year)已过时。 从 JDK 1.1 开始,由 Calendar.set(Calendar.YEAR, year + 1900) 取代。
String toGMTString()已过时。 从 JDK 1.1 开始,由 DateFormat.format(Date date) 取代,使用 GMT TimeZone。
String toLocaleString()已过时。 从 JDK 1.1 开始,由 DateFormat.format(Date date) 取代。
static long UTC(int year, int month, int date, int hrs, int min, int sec)

已过时。 从 JDK 1.1 开始,由 Calendar.set(year + 1900, month, date, hrs, min, sec) 或 GregorianCalendar(year + 1900, month, date, hrs, min, sec) 取代,使用 UTC TimeZone,后跟 Calendar.getTime().getTime()。

【示例】使用 Date 时间对象。

import java.util.Date;

/**
 * 使用 Date 时间对象
 */
@Test
public void testDate()
{
    // 1、创建一个 Date 时间对象,代表系统当前时间信息
    Date date = new Date();
    System.out.println("当前时间:" + date);

    // 2、获取当前时间的毫秒值
    long time = date.getTime(); //返回自1970年1月1日 00:00:00 GMT 以来此 Date 对象表示的毫秒数
    System.out.println("当前时间的毫秒值:" + time);

    // 3、将当前时间加2秒
    time += 2 * 1000;
    Date addDate = new Date(time);
    System.out.println("将当前时间加2秒:" + addDate);

    // 4、使用 setTime 方法修改时间
    Date newDate = new Date();
    newDate.setTime(time);
    System.out.println("修改后的时间对象:" + newDate);
}

执行结果:

2、SimpleDateFormat 类

SimpleDateFormat 是 Java 中 java.text 包下的一个类,它用于对日期和时间进行格式化和解析。通过指定一个模式字符串,SimpleDateFormat 可以将 Date 对象转换成特定格式的字符串,或者将特定格式的字符串解析回 Date 对象。

SimpleDateFormat 类的主要功能:

  1. 格式化:将 Date 对象转换为字符串。
  2. 解析:将字符串解析为 Date 对象。

SimpleDateFormat 类的构造方法:

构造方法说明
SimpleDateFormat(String pattern)创建简单日期格式化对象,并设置日期格式。

 SimpleDateFormat 类的常用方法:

方法说明
String format(Date date)将日期格式化成日期/时间字符串。
String format(Object time)将时间毫秒值格式化成日期/时间字符串。
Date parse(String source)将日期/时间字符串,转换为 Date 对象。

日期和时间模式(注意大小写,代表的含义是不同的):

模式说明
yyyy
MM
dd
hh1~12小时制(1-12)
HH24小时制(0-23)
mm
ss
S毫秒
E星期几
D一年中的第几天
F一月中的第几个星期(会把这个月总共过的天数除以7)
w一年中的第几个星期
W一月中的第几星期(会根据实际情况来算)
a上下午标识
k和HH差不多,表示一天24小时制(1-24)。
K和hh差不多,表示一天12小时制(0-11)。
z表示时区 

【示例】使用 SimpleDateFormat 类,实现日期和时间进行格式化和解析。

import java.text.SimpleDateFormat;
import java.text.ParseException;

/**
 * 使用 SimpleDateFormat 格式化日期和时间
 */
@Test
public void testSimpleDateFormat() throws ParseException
{
    // 1、创建一个 Date 时间对象,代表系统当前时间信息
    Date date = new Date();
    System.out.println("当前时间:" + date);

    // 2、格式化日期和时间
    SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss E a"); //设置日期格式
    String dateStr = simpleDateFormat.format(date);
    System.out.println("时间格式化:" + dateStr);

    // 3、将日期/时间字符串,转换为 Date 对象。
    Date parseDate = simpleDateFormat.parse(dateStr);
    System.out.println("转换为Date对象:" + parseDate);
}

执行结果:

3、Calendar 类

Java 的 Calendar 类是 java.util 包中的一个抽象类,提供了操作日历字段如年、月、日、时、分、秒等的方法。由于 Calendar 是一个抽象类,你不能直接实例化它,而是应该使用它的一个具体子类,比如 GregorianCalendar。

提示:GregorianCalendar 是 Calendar的子类,它实现罗马形式的日历。

Calendar 类的获取实例:

通常使用 getInstance() 方法来获取一个 Calendar 实例,该方法返回的是 GregorianCalendar 的一个实例(在大多数地区设置下)。

// 获取 Calendar 日历对象
Calendar calendar = Calendar.getInstance();

Calendar 类的常用方法:

方法说明
void add(int field, int amount)将 amount 添加到 field 指定的时间或日期部分。
int get(int field)返回调用对象中 field 指定部分的值。例如,各部分可以具有的值包括:Calendar.YEAR、Calendar.MONTH 和 Calendar.DATE 等。
Calendar getInstance()

返回默认地区和时区的 Calendar 对象。

Date getTime()返回与调用对象具有相同时间的 Date 对象。
set(int field, int value)将在 value 中指定的值设置为调用对象的 field 所指定的时间或日期部分。field 中的值为 Calendar 定义的字段之一,如:Calendar.YEAR、Calendar.MONTH 等。
boolean after(Object when)如果 Calendar 实例的当前时间在 Calendar 对象 when 之后,则返回 true。
boolean before(Object when)如果 Calendar 实例的当前时间在 Calendar 对象 when 之前,则返回 true。
void clear()清除当前 Calendar 实例中的所有时间组成部分。
Object clone()返回调用对象的副本。
boolean equals(Object obj)如果当前日历实例表示的 Calendar 实例与对象 obj 相同,则返回 true。

【示例】使用 Calendar 日历对象

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

/**
 * 使用 Calendar 日历对象
 */
@Test
public void testCalendar()
{
    // 1、获取 Calendar 日历对象
    Calendar calendar = Calendar.getInstance();

    // 2、显示日期和时间的各个组成部分
    System.out.println("显示日期和时间的各个组成部分:");
    System.out.println("年:" + calendar.get(Calendar.YEAR));
    System.out.println("月:" + (calendar.get(Calendar.MONTH) + 1));
    System.out.println("日:" + calendar.get(Calendar.DATE));
    System.out.println("小时:" + calendar.get(Calendar.HOUR_OF_DAY));
    System.out.println("分钟:" + calendar.get(Calendar.MINUTE));
    System.out.println("秒:" + calendar.get(Calendar.SECOND));
    System.out.println("毫秒:" + calendar.getTimeInMillis());

    // 3、当前时间添加30分钟,然后显示日期和时间
    calendar.add(Calendar.MINUTE, 30);
    Date date = calendar.getTime();
    System.out.println("当前时间添加30分钟后:" + date);
}

执行结果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

pan_junbiao

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

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

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

打赏作者

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

抵扣说明:

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

余额充值