一、日期时间类
1、时间戳
- 时间戳:当前时间与1970年1月1日0时0分0秒之间以毫秒为单位的时间差。
- java.lang.System 类 :此方法适于计算时间差
- 这个类我们用的最多的就是 currentTimeMillis() 方法,返回值是long型,获取系统当前时间的时间戳。
- java.lang.System 类 :此方法适于计算时间差
Demo代码示例:
long timeMillis = System.currentTimeMillis();
System.out.println(timeMillis);
2、Date 类和 SimpleDateFormat 类
-
java.util.Date类:表示特定的瞬间,精确到毫秒
- 构造方法
- 1)Date() 使用无参构造器创建的对象可以获取本地当前时间
- 2)Date(long date) 传入时间戳,获取指定时间戳对应的 Date 对象
- 成员方法
- 1)getTime() 返回当前时间的时间戳
- 2)toString() 把Date对象转换为以下形式的String:dow mon dd hh:mm:ss zzz yyy (dow是一周中的某一天 Sun、Mon、Tue、Wed、Thu、Fri、Sat;zzz是时间标准)。
- 构造方法
-
java.text.SimpleDateFormat类 格式化时间类
- 成员方法
- format(Date) 帮我们把时间转成字符串,字符串的格式为SimpleDateFormat类定义对象时设置的时间格式
- parse(String) 帮我们把字符串转化成时间
- 成员方法
Demo代码示例:
public class Test {
public static void main(String[] args) {
//时间类Date获取系统当前时间的方法
Date date = new Date();
// getTime()方法返回的是时间戳
long time = date.getTime();
System.out.println("时间戳------>"+time );
System.out.println("当前的日期是------>"+date);
// 当前的日期是------>Tue Jun 28 16:49:29 CST 2022
//系统时间格式,与我们实际使用的时间格式不一致,需要将其转换成实际使用的时间格式。
SimpleDateFormat format=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//把时间转换成字符串
System.out.println("格式化后的时间------->"+format.format(date));
//把字符串转换成时间
Date d = sdf.parse(s);
System.out.println(d);
}
}
注:由于用户输入的字符串不一定是我们要求的格式,可能是任何东西,想把它们转成时间是不可能的,你不可能把一个人转成时间 对吧,因此存在着很大的风险未处理(异常: java.text.ParseException),为此我们需要处理异常。
4、计算时间差
-
计算思路:
- 格式化时间
- 先将字符串转化成long类型时间
- 计算毫秒级别时间差,取绝对值
- 毫秒级别时间差转成秒级别
- 秒级别时间差转成分钟级别
- 分钟级别时间差转化显示成xx小时xx分钟
Demo代码示例:
package Simple;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class TestDiff {
public static void main(String[] args) throws ParseException {
String s1 = "2021-08-12 12:00:00"; // 开始时间
String s2 = "2021-08-12 14:35:00"; // 结束时间
//格式化时间
SimpleDateFormat sdf = new SimpleDateFormat("YYYY-MM-dd HH:mm:ss");
//将字符串转成时间形式
Date d1 = sdf.parse(s1);
Date d2 = sdf.parse(s2);
//计算时间差:先要获取时间毫秒形式(long类型) 再做差
long long1 = d1.getTime();
long long2 = d2.getTime();
long diffTime = Math.abs(long1 - long2);
// 秒级别时间差
long diffSec = diffTime / 1000;
// 分级别时间差
long diffMin = diffSec / 60;
//显示 xx小时xx分钟
long displayHours = diffMin / 60; // 小时
long displayMin = diffMin % 60; //分钟
System.out.println("您学习的时长为:"+displayHours+"小时"+displayMin+"分钟");
}
}