Java时间类笔记(Date,SimpleDateFormat,Calendar)
前言
学完了java的一些常用api,由于太多太杂,没有办法全部记下来,于是在idea敲了一遍后决定再写一篇笔记方便我反复查看。
Date类
简述
- java.util.Date 表示特定的瞬间,精确到毫秒
- 大部分方法已经过时,被Calendar类取代
常用方法
public Date() 创建Date对象,表示当前时间
public Date(long date)创建Date对象,表示指定时间
public void setTime(long time)设置/修改毫秒值
public long getTime() 获取时间对象的毫秒值
代码示例1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16import java.util.Date;
//创建Date对象
Date now = new Date(); //获取当前时间对象
Date specificDate = new Date(125,9,25);//2025年10月25日(年份从1900开始,月份0-11)
//常用方法
long time = now.getTime(); //获取毫秒数
now.setTime(16324294400000L)//设置时间
//比较时间
Date date1 = new Date();
Date date2 = new Date();
boolean isAfter = date1.after(date2);
boolean isBefore = date1.before(date2);
int compare = date1.compareTo(date2);
SimpleDateFormat类
简述
| 字母 | 含义 | 示例 |
|---|---|---|
| y | 年 | yyyy→2025 |
| M | 月 | MM→09 |
| d | 日 | dd→15 |
| H | 时(0-23) | HH→14 |
| h | 时(1-12) | hh→02 |
| m | 分 | mm→30 |
| s | 秒 | ss→45 |
| S | 毫秒 | SSS→789 |
| E | 星期 | E→周一 |
代码示例1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16import java.text.SimpleDateFormat;
import java.util.Date;
//创建格式化对象
SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy年MM月dd日 E HH时mm分ss秒");
//Date → String
Date now = new Date();
String formattedDate = std1.format(now);
System.out.println(formattedDate);//2025-10-24 21:20:12
//String → Date
String dateStr = "2025-10-24 21:20:12";
Date date = sdf1.parse(dateStr);
System.out.println(sdf2.format(date));//2025年10月24日 21时20分12秒
Calendar 类
简述
- java.util.Calendar 抽象类,提供日期计算功能
- 不能直接实例化,通过静态方法获取对象
获取Clendar对象
1
2
3import java.util.Calendar;
//获取当前时间的Calendar对象(默认时区、地区)
Calendar calendar = Calendar.getInstance();字段常量
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21//年月日
Calendar.YEAR//年份
Calendar.MONTH//月份(0-11)
Calendar.DATE//一个月中的日期
Calendar.DAY_OF_MONTH//同DATE
//星期相关
Calendar.DAY_OF_WEEK//星期几(周日=1,周六=7)
Calendar.DAY_OF_WEEK_IN_MONTH//当月第几个星期
Calendar.WEEK_OF_MONTH//当月第几周
Calendar.WEEK_OF_YEAR//当年第几周
//时间字段
Calendar.HOUT//12小时制的小时
Calendar.HOUR_OF_DAY//24小时制的小时
Calendar.MINUTE//分钟
Calendar.SECOND//秒
Calendar.MILLISECOND//毫秒
//上下午
Calendar.AM_PM//上午=0,下午=1
常用方法
获取字段值1
2
3
4Calendar cal = Calendar.getInstance();
//获取各个字段的值(其他同理)
int year = cal.get(Calendar.YEAR);
设置字段值1
2
3
4
5
6
7
8
9
10
11
12
13
14Calendar cal = Calendar.getInstance();
//单独设置字段
cal.set(Calendar.YEAR,2025);
//批量设置(年月日)
cal.set(2024,Calendar.December,25);
//批量设置(年月日时分秒)
cal.set(2024,Calendar.DECEMBER,25,18,30,0);
//清除字段
cal.clear(Calendar.MILLISECOND);//清楚毫秒
cal.clear();//清楚所有字段
日期计算
代码示例1
2
3
4
5
6
7
8Calendar cal1 = Calendar.getInstance();
Calendar cal2 = Calendar.getInstance();
cal2.add(Calendar.HOUR,2);
//比较方法
boolean isAfter = cal1.after(cal2);
boolean isBefore = cal1.before(cal2);]
boolean isEqual = cal1.equals(cal2);
细节
- 1.获取日历对象
- 细节:Calendar是一个抽象类,不能直接new,而是通过一个静态方法获取到子类对象
- 底层原理:
- 会根据系统不同时区来获取不同的日历对象,默认表示当前时间
- 会把时间中的纪元,年,月,日,时,分,秒,星期,等等的都放到一个数组当中
- 细节2:
- 月份:范围0~11 如果获取出来的是0,那么实际上是1月
- 星期:在老外的眼里,星期日是一周的第一天















