Date类常用方法总结(构造|格式化输出|String转换|Long转换|计算间隔|比较)
发布日期:2021-05-25 10:41:52 浏览次数:19 分类:博客文章

本文共 1959 字,大约阅读时间需要 6 分钟。

 

java.util.Date类

它重写了toString方法,new一个Date类直接输出是按照这样的格式

// "EEE MMM dd HH:mm:ss zzz yyyy" Fri May 21 16:16:50 CST 2021

构造

构造

Date现在推荐的构造方法有两个

其中无参构造返回的实例是以当前时间为日期的

所有表示时间的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));//毫秒转换为天数

 

 

参考:

 

上一篇:synchronized底层原理
下一篇:Java Arrays.sort()重写comparator方法

发表评论

最新留言

很好
[***.229.124.182]2025年04月24日 16时58分46秒