Date类常用方法总结(构造|格式化输出|String转换|Long转换|计算间隔|比较)
java.util.Date类
它重写了toString方法,new一个Date类直接输出是按照这样的格式
// "EEE MMM dd HH:mm:ss zzz yyyy"
Fri May 21 16:16:50 CST 2021
构造
构造
其中无参构造返回的实例是以当前时间为日期的
所有表示时间的long类型日期都是表示从1970年1月1日午夜到现在的时间的时间,单位是ms
//1.
public Date() {
this(System.currentTimeMillis());
}
//2.
public Date(long date) {
fastTime = date;
}
自定义格式化输出
String和Date的转换可以借助 SimpleDateFormat 类来完成
在构造时将格式化字符串当做变量传入,之后调用相关方法即可
将格式字符串转成Date使用的是其.format()方法,将Date转化为格式化字符串则是其.parse()方法
其格式所用占位符使用方法如下
| y | 年份。一般用 yy 表示两位年份,yyyy 表示 4 位年份 | 使用 yy 表示的年扮,如 11; 使用 yyyy 表示的年份,如 2011 |
|---|---|---|
| M | 月份。一般用 MM 表示月份,如果使用 MMM,则会 根据语言环境显示不同语言的月份 | 使用 MM 表示的月份,如 05; 使用 MMM 表示月份,在 Locale.CHINA 语言环境下,如“十月”;在 Locale.US 语言环境下,如 Oct |
| d | 月份中的天数。一般用 dd 表示天数 | 使用 dd 表示的天数,如 10 |
| D | 年份中的天数。表示当天是当年的第几天, 用 D 表示 | 使用 D 表示的年份中的天数,如 295 |
| E | 星期几。用 E 表示,会根据语言环境的不同, 显示不 同语言的星期几 | 使用 E 表示星期几,在 Locale.CHINA 语 言环境下,如“星期四”;在 Locale.US 语 言环境下,如 Thu |
| H | 一天中的小时数(0~23)。一般用 HH 表示小时数 | 使用 HH 表示的小时数,如 18 |
| h | 一天中的小时数(1~12)。一般使用 hh 表示小时数 | 使用 hh 表示的小时数,如 10 (注意 10 有 可能是 10 点,也可能是 22 点) |
| m | 分钟数。一般使用 mm 表示分钟数 | 使用 mm 表示的分钟数,如 29 |
| s | 秒数。一般使用 ss 表示秒数 | 使用 ss 表示的秒数,如 38 |
| S | 毫秒数。一般使用 SSS 表示毫秒数 | 使用 SSS 表示的毫秒数,如 156 |
举例如下
SimpleDateFormat f = new SimpleDateFormat("今天是 " + "yyyy 年 MM 月 dd 日 E HH 点 mm 分 ss 秒");
System.out.println(f.format(now));
//今天是 2021 年 05 月 21 日 星期五 16 点 47 分 21 秒
比较&计算
两个Date类型可以直接比较,使用Date的before和after方法即可
举例:
SimpleDateFormat ft = new SimpleDateFormat ("yyyy-MM-dd HH mm ss")
System.out.println((ft.parse("2021-5-22 06 21 11")).after(ft.parse("2021-5-22 04 21 11")));
//true
那么如何计算两个Date之间的间隔呢?
一般会用到Date的getTIme方法,将Date转为Long格式,通过两个日期与1970.1.1午夜的时间差来计算
之后再将差值毫秒进行处理即可获得相差的天数/月数/年数。。。处理时需要注意的是Long是整数类型,进行除法运算自动抹零,所以最好转成double运算,否则就会出现以下情况:
-
逻辑上我们总是会认为,不到一天实际上相差的是一天,比如元旦1月1号放假,12.31号的你早上八点起床去上班,这时举例1.1零点其实已经不足一天了,但是我们仍然会认为还有一天放假,所以如果直接抹零,很多业务逻辑会出问题,所以需要结合Math.ceil()方法一起处理
举例:
//计算两个日期相差天数
double span=ft.parse("2021-5-22 06 21 11").getTime()-ft.parse("2021-5-22 04 21 11").getTime();
System.out.println(Math.ceil(span/1000/3600/24));//毫秒转换为天数
参考:

浙公网安备 33010602011771号