Java中的日期与时间的使用,系列文章:
《Java中的日期与时间对象:Date类、SimpleDateFormat类、Calendar类》
《Java中的日期与时间对象:LocalDate类、LocalTime类、LocalDateTime类》
《Java中的时区和带时区的时间对象:ZoneId类、ZonedDateTime类》
《Java中的日期与时间格式化器:DateTimeFormatter类》
《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 类的主要特性:
- 瞬时表示:Date 对象表示从1970年1月1日00:00:00 GMT(也称为Unix纪元或Epoch时间)开始的毫秒数。
- 精度:时间表示的精度取决于系统时钟的精度。
- 可变性:像大多数其他Java对象一样,Date 对象是可变的。这意味着一旦你创建了一个 Date 对象,你可以更改它所表示的时间(尽管这不是一个好的实践,因为它可能会导致代码中的不可预测行为)。
- 过时的方法: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 类的主要功能:
- 格式化:将 Date 对象转换为字符串。
- 解析:将字符串解析为 Date 对象。
SimpleDateFormat 类的构造方法:
| 构造方法 | 说明 |
|---|---|
| SimpleDateFormat(String pattern) | 创建简单日期格式化对象,并设置日期格式。 |
SimpleDateFormat 类的常用方法:
| 方法 | 说明 |
|---|---|
| String format(Date date) | 将日期格式化成日期/时间字符串。 |
| String format(Object time) | 将时间毫秒值格式化成日期/时间字符串。 |
| Date parse(String source) | 将日期/时间字符串,转换为 Date 对象。 |
日期和时间模式(注意大小写,代表的含义是不同的):
| 模式 | 说明 |
|---|---|
| yyyy | 年 |
| MM | 月 |
| dd | 日 |
| hh | 1~12小时制(1-12) |
| HH | 24小时制(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);
}
执行结果:


1802

被折叠的 条评论
为什么被折叠?



