Java Date 类与 SimpleDateFormat 类常用方法总结
·
Date 与 SimpleDateFormat
摘要
- Date 类用于表示特定瞬间的时间(精确到毫秒),核心处理时间戳与日期比较;
- SimpleDateFormat 类是 Date 类的 “格式化工具”,用于 Date 对象与字符串的相互转换(支持自定义格式);
- 两者配合实现日期的存储、展示与解析,但需注意:Date 类多数分量操作方法已过时,SimpleDateFormat 存在线程不安全问题,Java 8 + 推荐用
java.time包替代。
一、Date 类常用方法
1. 构造方法
| 返回值类型 | 方法名 | 核心功能 |
|---|---|---|
| Date | Date() | 创建表示当前系统时间的 Date 对象(精确到毫秒) |
| Date | Date(long date) | 根据时间戳(1970-01-01 00:00:00 GMT 起的毫秒数)创建 Date 对象 |
2. 时间戳操作
| 返回值类型 | 方法名 | 核心功能 |
|---|---|---|
| long | getTime() | 获取 Date 对象对应的时间戳(毫秒数) |
| void | setTime(long time) | 设置 Date 对象的时间戳(修改表示的时间) |
3. 日期比较
| 返回值类型 | 方法名 | 核心功能 |
|---|---|---|
| boolean | before(Date when) | 判断当前 Date 是否在指定 Date 之前 |
| boolean | after(Date when) | 判断当前 Date 是否在指定 Date 之后 |
| int | compareTo(Date anotherDate) | 比较两个 Date:0 = 相等,负数 = 当前更早,正数 = 当前更晚 |
| boolean | equals(Object obj) | 判断两个 Date 是否表示同一时间(时间戳相等) |
4. 过时方法(旧代码使用)
| 返回值类型 | 方法名 | 核心功能 |
|---|---|---|
| int | getYear() | 获取年份(返回值 = 实际年份 - 1900,已过时) |
| int | getMonth() | 获取月份(0=1 月,11=12 月,已过时) |
| int | getDate() | 获取当月日期(1~31,已过时) |
| int | getHours() | 获取小时(0~23,已过时) |
| int | getMinutes() | 获取分钟(0~59,已过时) |
| int | getSeconds() | 获取秒数(0~59,已过时) |
二、SimpleDateFormat 类常用方法
1. 构造方法
| 返回值类型 | 方法名 | 核心功能 |
|---|---|---|
| SimpleDateFormat | SimpleDateFormat(String pattern) | 根据自定义格式创建格式化对象(如 "yyyy-MM-dd HH:mm:ss") |
| SimpleDateFormat | SimpleDateFormat(String pattern, Locale locale) | 按指定语言环境创建格式化对象(解决国际化日期格式) |
2. 格式化与解析
| 返回值类型 | 方法名 | 核心功能 |
|---|---|---|
| String | format(Date date) | 将 Date 对象格式化为指定格式的字符串 |
| Date | parse(String source) | 将字符串按指定格式解析为 Date 对象(需处理 ParseException) |
3. 格式与时区设置
| 返回值类型 | 方法名 | 核心功能 |
|---|---|---|
| void | applyPattern(String pattern) | 修改日期格式模式(如从 "yyyy-MM-dd" 改为 "yyyy/MM/dd") |
| void | setTimeZone(TimeZone zone) | 设置时区(如 TimeZone.getTimeZone ("GMT+8")) |
| String | toPattern() | 获取当前使用的格式模式字符串 |
| TimeZone | getTimeZone() | 获取当前设置的时区 |
三、Date 与 SimpleDateFormat 代码示例
Date 日期类示例
import java.util.Date;
import java.text.SimpleDateFormat;
import java.util.TimeZone;
import java.util.Locale;
import java.text.ParseException;
// ========== Date类示例 ==========
// 1. 构造方法
Date date1 = new Date(); // 创建当前系统时间的Date对象
System.out.println("Date()构造:" + date1); // 输出当前时间默认格式,示例:Wed Nov 26 16:30:00 CST 2025
Date date2 = new Date(1764123456789L); // 按时间戳创建Date对象
System.out.println("Date(long)构造:" + date2); // 输出指定时间戳的时间,示例:Sat Aug 31 12:17:36 CST 2025
// 2. 时间戳操作
long timestamp = date1.getTime(); // 获取Date对象的时间戳
System.out.println("getTime()获取时间戳:" + timestamp); // 输出当前时间戳(毫秒),示例:1764124200000
date1.setTime(1764123456789L); // 设置新的时间戳
System.out.println("setTime()修改后:" + date1); // 输出修改后的时间,示例:Sat Aug 31 12:17:36 CST 2025
// 3. 日期比较
Date date3 = new Date(1764123000000L);
Date date4 = new Date(1764123456789L);
boolean isBefore = date3.before(date4); // 判断date3是否在date4之前
System.out.println("before():" + isBefore); // 输出:true
boolean isAfter = date3.after(date4); // 判断date3是否在date4之后
System.out.println("after():" + isAfter); // 输出:false
int compareResult = date3.compareTo(date4); // 比较两个Date对象
System.out.println("compareTo():" + compareResult); // 输出:-1(date3更早)
boolean isEqual = date3.equals(date4); // 判断是否为同一时间
System.out.println("equals():" + isEqual); // 输出:false
// 4. 过时方法
int year = date1.getYear() + 1900; // 获取年份(需+1900修正)
System.out.println("getYear():" + year); // 输出:2025
int month = date1.getMonth() + 1; // 获取月份(需+1修正)
System.out.println("getMonth():" + month); // 输出:8
int day = date1.getDate(); // 获取当月日期
System.out.println("getDate():" + day); // 输出:31
int hour = date1.getHours(); // 获取小时
System.out.println("getHours():" + hour); // 输出:12
int minute = date1.getMinutes(); // 获取分钟
System.out.println("getMinutes():" + minute); // 输出:17
int second = date1.getSeconds(); // 获取秒数
System.out.println("getSeconds():" + second); // 输出:36
SimpleDateFormat 示例
// ========== SimpleDateFormat类示例 ==========
// 1. 构造方法
SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); // 自定义格式构造
System.out.println("SimpleDateFormat(String)构造:" + sdf1.toPattern()); // 输出:yyyy-MM-dd HH:mm:ss
SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy年MM月dd日", Locale.CHINA); // 指定语言环境构造
System.out.println("SimpleDateFormat(String, Locale)构造:" + sdf2.toPattern()); // 输出:yyyy年MM月dd日
// 2. 格式化与解析
String formatStr = sdf1.format(date1); // Date对象格式化为字符串
System.out.println("format()格式化:" + formatStr); // 输出:2025-08-31 12:17:36
try {
Date parseDate = sdf1.parse("2025-08-31 12:17:36"); // 字符串解析为Date对象
System.out.println("parse()解析:" + parseDate); // 输出:Sat Aug 31 12:17:36 CST 2025
} catch (ParseException e) {
e.printStackTrace();
}
// 3. 格式与时区设置
sdf1.applyPattern("yyyy/MM/dd"); // 修改格式模式
System.out.println("applyPattern()修改后模式:" + sdf1.toPattern()); // 输出:yyyy/MM/dd
sdf1.setTimeZone(TimeZone.getTimeZone("GMT")); // 设置GMT时区
System.out.println("setTimeZone()后时区:" + sdf1.getTimeZone().getID()); // 输出:GMT
String gmtFormat = sdf1.format(date1); // 按GMT时区格式化
System.out.println("GMT时区格式化:" + gmtFormat); // 输出:2025/08/31
TimeZone currentTZ = sdf1.getTimeZone(); // 获取当前时区
System.out.println("getTimeZone()获取时区:" + currentTZ.getID()); // 输出:GMT
总结
Date 类
- 核心价值:处理时间戳和日期比较,是 Java 早期时间处理的基础类;
- 局限性:日期分量操作(getYear () 等)已过时,不支持直接格式化,Java 8 + 推荐用
Instant(时间戳)或LocalDateTime替代。SimpleDateFormat 类
- 核心价值:实现 Date 与字符串的灵活转换,支持自定义格式;
- 风险点:线程不安全(多线程环境下需避免共用实例,或改用
ThreadLocal包装);Java 8 + 推荐用DateTimeFormatter(线程安全)替代。
最佳实践
- 新开发项目优先使用 Java 8 + 的
java.time包(LocalDateTime、DateTimeFormatter、Instant);- 维护旧代码时,Date 与 SimpleDateFormat 配合使用需注意:SimpleDateFormat 避免多线程共享,解析字符串时捕获 ParseException,过时方法尽量用 Calendar 类替代。
更多推荐

所有评论(0)