目录
一、JDK7时间类
1. Date类
Date
类位于java.util
包中。它是 Java 早期用于表示日期和时间的类,提供了基本的时间操作功能。不过,自 Java 8 起,推荐使用java.time
包中的 API(如LocalDateTime
、ZonedDateTime
等)替代,因为它们提供了更简洁、线程安全且功能丰富的时间处理能力。
● Date类是一个JDK写好的javabean类,用来描述时间,精确到毫秒
● 利用空参构造创建的对象,默认表示系统当前时间
● 利用有参构造创建的对象,表示指定时间
构造方法说明
构造方法 | 说明 |
---|---|
public Date() | 创建Date对象,表示当前时间 |
public Date(long date) | 创建Date对象,表示指定毫秒值对应的时间 |
常用方法说明
方法名 | 说明 |
---|---|
public void setTime(long time) | 设置/修改时间的毫秒值 |
public long getTime() | 获取时间对象的毫秒值 |
使用示例:
// 创建表示当前时间的Date对象
Date now = new Date();
System.out.println(now); // 输出如:Sun May 11 10:23:45 CST 2025
// 创建表示指定时间的Date对象(毫秒值)
Date specifiedDate = new Date(1000); // 1970年1月1日加上1000毫秒
System.out.println(specifiedDate);
// 获取Date对象的毫秒值
long timeInMillis = now.getTime();
System.out.println("毫秒值:" + timeInMillis);
2. Calendar类
Calendar
类是 Java 早期用于处理日期和时间的抽象类,位于java.util
包中。它提供了比Date
更丰富的日历操作功能(如获取 / 设置年、月、日、时、分、秒等),但同样存在线程安全问题,Java 8 后推荐使用java.time
包中的Calendar
类替代。
● Calendar代表了系统当前时间的日历对象,可以单独修改、获取时间中的年,月,日
● 细节:Calendar是一个抽象类,不能直接创建对象
● 细节:
月份:范围是0~11,0代表1月
星期:在老外眼中,星期日是一个星期的第一天
即:1(星期日)2(星期一)3(星期二)4(星期三)5(星期四)6(星期五)7(星期六)
获取对象方法
方法名 | 说明 |
---|---|
public static Calendar getInstance() | 获取Calendar对象,默认表示当前时间 |
常用方法说明
方法名 | 说明 |
---|---|
public int get(int field) | 获取某个字段的值 |
public void set(int field, int value) | 设置某个字段的值 |
public void add(int field, int amount) | 为某个字段增加/减少指定量 |
public final Date getTime() | 转换成Date对象 |
public long getTimeInMillis() | 获取时间的毫秒值 |
常用字段常量
常量 | 说明 |
---|---|
Calendar.YEAR | 年 |
Calendar.MONTH | 月(0-11) |
Calendar.DAY_OF_MONTH | 日 |
Calendar.HOUR | 12小时制小时 |
Calendar.HOUR_OF_DAY | 24小时制小时 |
Calendar.MINUTE | 分钟 |
Calendar.SECOND | 秒 |
Calendar.DAY_OF_WEEK | 星期几(1-7,1代表星期日) |
使用示例:
// 获取Calendar对象
Calendar calendar = Calendar.getInstance();
// 获取年、月、日
int year = calendar.get(Calendar.YEAR);
// 注意:月份从0开始,0代表1月,11代表12月
int month = calendar.get(Calendar.MONTH) + 1; // +1转换为人类习惯
int day = calendar.get(Calendar.DAY_OF_MONTH);
System.out.println(year + "年" + month + "月" + day + "日");
// 设置年、月、日
calendar.set(Calendar.YEAR, 2026);
calendar.set(Calendar.MONTH, 0); // 1月
calendar.set(Calendar.DAY_OF_MONTH, 1);
// 也可以一次性设置年、月、日
calendar.set(2026, 0, 1); // 2026年1月1日
// 日期计算
calendar.add(Calendar.DAY_OF_MONTH, 10); // 增加10天
calendar.add(Calendar.MONTH, -1); // 减少1个月
// 转换成Date对象
Date date = calendar.getTime();
3. SimpleDateFormat类
SimpleDateFormat
是 Java 早期用于日期格式化和解析的类,位于 java.text
包中。它允许开发者将 Date
对象格式化为字符串,或将字符串解析为 Date
对象。
● 格式化:把时间变成我们喜欢的格式
● 解析:把字符串表示的时间变成Date对象
构造方法说明
构造方法 | 说明 |
---|---|
public SimpleDateFormat() | 构造一个SimpleDateFormat,使用默认格式 |
public SimpleDateFormat(String pattern) | 构造一个SimpleDateFormat,使用指定的格式 |
常用方法说明
方法名 | 说明 |
---|---|
public final String format(Date date) | 格式化(日期对象 -> 字符串) |
public Date parse(String source) | 解析(字符串 -> 日期对象) |
常用的模式字母
字母 | 含义 |
---|---|
y | 年 |
M | 月 |
d | 日 |
H | 小时(24小时制) |
h | 小时(12小时制) |
m | 分钟 |
s | 秒 |
S | 毫秒 |
E | 星期几 |
a | 上午/下午标记 |
使用示例:
// 创建日期对象
Date date = new Date();
// 使用默认格式化器
SimpleDateFormat defaultFormat = new SimpleDateFormat();
String defaultStr = defaultFormat.format(date);
System.out.println("默认格式:" + defaultStr); // 默认格式如:5/11/25 10:23 AM
// 自定义格式化器
SimpleDateFormat customFormat = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
String customStr = customFormat.format(date);
System.out.println("自定义格式:" + customStr); // 如:2025年05月11日 10:23:45
// 解析字符串为日期对象
try {
String dateStr = "2025-05-11 10:23:45";
SimpleDateFormat parseFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date parsedDate = parseFormat.parse(dateStr);
System.out.println("解析结果:" + parsedDate);
} catch (Exception e) {
e.printStackTrace();
}
注意事项:
- SimpleDateFormat不是线程安全的,在多线程环境下应该为每个线程创建独立的实例
- 解析时,字符串的格式必须与SimpleDateFormat的模式匹配,否则会抛出ParseException
-
默认格式说明
无参构造函数SimpleDateFormat()
使用的默认格式取决于当前 Java 虚拟机的区域设置(Locale)。常见 Locale 的默认格式示例如下:Locale 日期默认格式 时间默认格式 日期 + 时间默认格式 中文(中国) yyyy-M-d
H:mm:ss
yyyy-M-d H:mm:ss
英文(美国) M/d/yyyy
h:mm:ss a
M/d/yyyy h:mm:ss a
日文(日本) yyyy/MM/dd
H:mm:ss
yyyy/MM/dd H:mm:ss
二、JDK8时间类
LocalDate
是 Java 8 引入的日期处理类,位于 java.time
包中。它专注于表示日期(年、月、日),不包含时间和时区信息,具有不可变性和线程安全性。
1. LocalDate类
● LocalDate表示不带时区的日期(年月日)
● 该类是不可变的,所有的修改操作都会返回新的实例
创建对象的方法
方法名 | 说明 |
---|---|
public static |