常用API(4):Date、SimpleDateFormat、Calendar(日期时间)

41 阅读3分钟

1、Date

Date类的对象在Java中代表的是当前所在系统的此刻日期时间。

Date的构造器:
public Date()创建一个Date对象,代表的是系统当前此刻日期时间

Date的常用方法:
public long getTime()获取时间对象的毫秒值

Date类记录时间的2种形式:
形式1:日期对象

//1、创建一个Date类的对象:代表系统此刻日期时间对象
Date d = new Date();
System.out.println(d);//Thu May 11 11:15:06 CST 2023

形式2:时间毫秒值

//2、获取时间毫秒值
long time = d.getTime();
System.out.println(time);//1683774906466

案例说明:计算出当前时间往后走3个小时21秒后的时间是多少。
时间毫秒值 -> 日期对象:
public Date(long time)把时间毫秒值转换成Date日期对象。
public void setTime(long time)设置日期对象的时间为当前时间毫秒值对应的时间
实例代码如下:

//1、得到当前时间
Date d1 = new Date();
System.out.println(d1);

//2、当前时间往后走3小时21秒
long time = System.currentTimeMillis();
time += (60 * 60 * 3 + 21) * 1000;

//3、把时间毫秒值转换成对应的日期对象
//方法一:
Date d2 = new Date();
System.out.println(d2);
//方法二:
Date d3 = new Date();
d3.setTime(time);
System.out.println(d3);

得到的结果为:

image.png

2、SimpleDateFormat

可以对Date对象或时间毫秒值格式化成我们喜欢的时间格式,也可以把字符串的时间解析成日期对象。

SimpleDateFormat的构造器:
public SimpleDateFormat()构造一个SimpleDateFormat,使用默认格式。
public SimpleDateFormat(String pattern)构造一个SimpleDateFormat,使用指定格式

SimpleDateFormat的格式化方法:
public final String format(Date date)将日期格式化成日期/时间字符串 public final String format(Object time)将时间毫秒值化成日期/时间字符串
代码示例如下:

//1、日期对象
Date d = new Date();
System.out.println(d);//Thu May 11 15:18:22 CST 2023

//2、格式化这个日期对象(指定最终格式化的形式)
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss EEE a");

//3、开始格式化日期对象成为喜欢的字符串形式
String rs = sdf.format(d);
System.out.println(rs);//2023年05月11日 15:18:22 周四 下午

//4、格式化时间毫秒值
//需求:请问121秒后的时间是多少
long time1 = System.currentTimeMillis() + 121 * 1000;
String rs2 = sdf.format(time1);
System.out.println(rs2);

SimpleDateFormat解析字符串时间成为日期对象
public Date parse(String source)从给定字符串的开始解析文本以生成日期

案例需求:请计算出2023年05月11日11时11分11秒,往后走2天14小时49分06秒后的时间是多少
示例代码如下:

public static void main(String[] args) throws ParseException {
    //1、把字符串时间拿到程序中来
    String dateStr = "2023年05月11日 11:11:11";

    //2、把字符串时间解析成日期对象:形式必须与被解析时间的形式完全一样,否则运行时解析报错!
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
    Date d = sdf.parse(dateStr);

    //3、往后走2天14小时49分06秒
    long time = d.getTime() + (2L*24*60*60 + 14*60*60 + 49*60 + 6) * 1000;//2后面的L是转换成long型以免数据失真

    //4、格式化这个时间毫秒值就是结果
    System.out.println(sdf.format(time));//2023年05月14日 02:00:17
}

3、Calendar

Calendar代表了系统此刻日期对应的日历对象,是一个抽象类,不能直接创建对象。

Calendar常用方法:
public int get (int field) 取日期中某个字段信息

public void set (int field,int value) 修改日历的某个字段信息

public void add (int field,int amount) 为某个字段添加/减少指定的值

public final Date getTime () 拿到此刻日期对象

public long getTimeInMillis ()拿到此刻时间毫秒值