文章目录
学习日记(常用类之经典的时间日期类:Date、SimpleDateFormat、Calender 类)
一、Date 类
- Date 类的对象在 java 中代表的是当前所在系统的此刻日期时间。
1. 记录时间(时间毫秒值、Date(日期)对象)
记录时间的两种形式:
- 日期:创建 Date(日期)对象,可以获取系统此时的日期时间。
- 时间毫秒值:调用方法,可以获取系统此时的时间毫秒值或用
System.currentTimeMillis()
。
名称 | 说明 | |
---|---|---|
构造器 | public Date() | 创建一个 Date 对象,代表的是系统当前此刻的日期时间 |
常用方法 | public long getTime() | 获取时间对象此刻的毫秒值,返回值为 long 类型 |
2. 转换:时间毫秒值 -> Date(日期)对象
时间毫秒值转换为日期的方法:
名称 | 说明 | |
---|---|---|
构造器 | public Date(long time) | 把时间毫秒值转换成 Date 时间对象 |
举例:计算出当前时间往后走 1 小时 121 秒之后的时间。
二、SimpleDateFormat 类
- 可以把 Date 对象或时间毫秒值格式化成我们喜欢的时间形式(Date 对象或时间毫秒值 -> 时间格式)。
- 也可以把字符串的时间形式解析成日期对象(时间格式 -> Date 对象)。
构造器 | 说明 |
---|---|
public SimpleDateFormat(String pattern) | 有参构造器,使用指定的格式构造 |
1. Date 对象或时间毫秒值 -> 时间格式(格式化)
格式化方法 | 说明 |
---|---|
public final String format(Date date) | Date 对象 -> 时间格式,返回值为 String 类型 |
public final String format(Object time) | 时间毫秒值 -> 时间格式,返回值为 String 类型 |
2. 时间格式 -> Date 对象(解析)
解析方法 | 说明 |
---|---|
public Date parse(String source) | 时间格式 -> Date 对象,返回值为 Date 类型 |
举例:请计算出 2021 年 08 月 06 日 11 点 11 分 11 秒,往后走 2 天 14 小时 49 分 06 秒后的时间为多少。
注意:计算时间时,默认为 int 类型,防止数据溢出,用 “2L” 变为 long 型。
3. 案例:秒杀活动
秒杀时间为:2022年11月11日 00:00:00;结束时间为:2022年11月11日 00:10:00
姓名 秒杀时间 小绿 2022年11月11日 00:03:47 小红 2022年11月11日 00:10:11 需求:判断两个同学是否秒杀成功。
分析:转化为时间毫秒值比较是否在秒杀时间范围内。
三、Calender 类
- Calendar 代表了系统此刻日期对应的日历对象。
- Calendar 是一个抽象类,不能直接创建对象。
Calendar 日历类创建日历对象的方法:Calendar rightNow = Calendar.getInstance();
。
常用方法名 | 说明 |
---|---|
public int get(int field) | 取日期中的某个字段 |
注意:
- 区分:
- Date(日期)对象例如:
Thu Sep 22 11:04:32 CST 2022
; - 时间毫秒值例如:
1663815872197
; - 喜欢的时间格式例如:
2022年09月22日 11:06:23 星期四 上午
;
- 举例:计算从 1999 年 11 月 18 日零点到今天所走过的时间。
package com.residue.manyclass02;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class SimpleDateFormatDemo03 {
public static void main(String[] args) throws ParseException {
//计算从 1999 年 11 月 18 日零点到今天所走过的时间
//思路:现在的时间毫秒值 - 之前的时间毫秒值
long t1 = new Date().getTime(); //现在的时间毫秒值
//long t1 = System.currentTimeMillis();
SimpleDateFormat s = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String str = "1999-11-18 00:00:00";
Date date2 = s.parse(str);
long t2 = date2.getTime();
//计算
long d = (long) Math.floor((t1 - t2)/(1000.0*3600*24)); //天
long h = (long) Math.floor((t1 - t2 - d*24L*3600*1000.0)/(1000.0*3600)); //小时
long m = (long) Math.floor((t1 - t2 - d*24L*3600*1000.0 - h*3600*1000.0)/(1000.0*60)); //分
double ss = (t1 - t2 - d*24L*3600*1000.0 - h*3600*1000.0 - m*60*1000.0)/1000.0; //秒
System.out.println("经过:" + d + " 天 " + h + " 小时 " + m + " 分 " + ss + " 秒。");
}
}
- Date 类的月份是从
1
开始,而 Calendar 类的月份是从0
开始。 - Calendar 通过方法创建的对象是可变日期对象,一旦修改后其对象本身表示的时间将产生变化。