JDK7前时间相关类
Date 时间类
时间的相关知识点
- 全世界的时间,有一个统一的计算标准
- 格尼尼治时间/格林威治时间(Greenwich Mean Time)简称GMT
- 计算核心:地球自转一天是24小时,太阳直射时为正午12点
- 原子钟:利用铯原子的震动的频率计算出来的时间,作为目前世界标准时间(UTC)
- 中国标准时间:世界标准时间+8小时
Date类定义在java.util包下
Date类是一个JDK写好的Javabean类,用来描述时间,精确到毫秒
-
在Date类中定义了成员变量fastTime,用于储存时间的毫秒值
private transient long fastTime;
-
利用空参构造创造的对象,默认表示系统当前时间
- 底层原理:调用System类下的currentTimeMillis()方法并返回
-
利用有参构造创建的对象,表示指定的时间
| 方法 | 说明 |
|---|---|
| public Date() | 创建Date对象,表示当前时间 |
| public Date(long date) | 创建Date对象,表示指定时间,表示从时间原点开始,过了data毫秒的时间,date是long类型,后面要加一个L |
| public void setTime(long time) | 设置/修改时间对象的毫秒值,表示从时间原点开始,过了time毫秒的时间 |
| public long getTime() | 获取时间对象的毫秒值,获取的是当前时间与时间原点的差 |
SimpleDateFormat 格式化时间
SimpleDateFormat类定义在java.text包下
作用:
- 格式化:把时间变成我们喜欢的格式
- 解析:把字符串表示的时间变成Date对象
| 构造方法 | 说明 |
|---|---|
| public SimpleDateFormat() | 构造一个SimpleDateFormat,使用默认格式 1970/1/1 上午8:00 |
| public SimpleDateFormat(String pattern) | 构造一个SimpleDateFormat,使用指定的格式 |
| 常用方法 | 说明 |
|---|---|
| public final String format(Date date) | 格式化(日期对象 > 字符串) |
| public Date parse(String source) | 解析(字符串 > 日期对象) |
格式化的时间格式的常用的模式对应关系如下
| 日期或时间元素 | 表示 |
|---|---|
| 年 | y |
| 年中的月份 | M |
| 年中的周数 | w |
| 月份中的周数 | W |
| 年中的天数 | D |
| 月份中的星期 | F |
| 星期中的天数 | E |
| am/pm标记 | a |
| 一天中的小时数(0-23) | H |
| 一天中的小时数(1-24) | k |
| am/pm中的小时数(0-11) | K |
| am/pm中的小时数(1-12) | h |
| 小时中的分钟数 | m |
| 分钟中的秒数 | s |
| 毫秒数 | S |
| 2023-11-11 13:27:06 | yyyy-MM-dd HH:mm:ss |
| 2023年11月11日 13:27:06 周四 | yyyy年MM月dd日 HH:mm:ss EE |
- 解析时间
//定义一个字符串表示时间
String str = "2023-11-11 11:11:11";
//利用带参构造创建SimpleDateFormat对象
//创建对象的格式要跟字符串的格式完全一致
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//Alt + Enter 选择第一个,让代码先不要报错
Date date = sdf.parse(str);
sout(date.getTime());
Calendar 日历
- Calendar代表了系统当前时间的日历对象,可以单独修改、获取时间中的年,月,日
- 细节:Calendar是一个抽象类,不能直接创建对象
获取Calendar日历对象的方法
| 方法名 | 说明 |
|---|---|
| public static Calendar getInstance() | 获取当前时间的日历对象 |
- 底层原理:会根据系统的不同时区来获取不同的日历对象,默认表示当前时间
- 还会把时间中的纪元,年,月,日,时,分,秒,星期,等等的都放到一个数组中
Calendar常用方法
| 方法名 | 说明 |
|---|---|
| public final Date getTime() | 获取日期对象 |
| public final setTime(Date date) | 给日历设置日期对象 |
| public long getTimeInMillis() | 拿到时间毫秒值 |
| public void setTimeInMillis(long millis) | 给日历设置时间毫秒值 |
| public int get(int field) | 获取日历中的某个字段信息 |
| public void set(int field, int value) | 修改日历的某个字段信息 |
| public void add(int field, int amount) | 为某个字段添加/减少指定的值 |
-
获取出来的月份范围是0-11,如果获取出来的是0,那么时间是1月
-
在西方,星期日是一周的第一天,如果获取出来的是1,那么就是星期日
-
field字段
- java在Calendar类中,把索引对应的数字都定义成了常量
| field | 对应常量 | 说明 |
|---|---|---|
| 0 | ERA | 纪元 |
| 1 | YEAR | 年 |
| 2 | MONTH | 月 |
| 3 | WEEK_OF_YEAR | 一年中的第几周 |
| 4 | WEEK_OF_MONTH | 一个月中的第几周 |
| 5 | DATE/DAY_OF_MONTH | 一个月中的第几天(日期) |
| 6 | DAY_OF_YEAR | 一年中的第几天 |
| 7 | DAY_OF_WEEK | 一年中的第几周 |
| 8 | DAY_OF_WEEK_IN_MONTH | 某月中的某一天 |
| 9 | AM_PM | am或pm |