时间比较的几种方法
经常要比较时间,但是总是忘记需要搜索,希望记录下来,加深印象
1.使用时间戳比较时间 使用date.getTime() 获取时间戳
注:时间戳是指格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起至现在的总秒数。
import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; public class DateCompareTest { public static void main(String[] args) throws ParseException { SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String stringDate = "2020-03-11 12:12:11"; Date date = (Date) format.parse(stringDate); Date time = new Date(); long timeStamp1 = date.getTime(); long timeStamp2 = date.getTime(); System.out.println(timeStamp1); //时间戳:1583899931000 System.out.println(timeStamp1 > timeStamp2); //输出false } }
2. 使用Date实例的compareTo()方法。这个是比较时间,不是比较日期
使用:date1.compareTo(date2) 。
返回值:如果date1小于date2, 返回-1,;如果date1 等于 date2,返回0;如果date1 大于 date2,返回1
public class DateCompareTest { public static void main(String[] args) throws ParseException { SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String strNow = format.format(new Date()); Date now = format.parse(strNow); System.out.println(now); String stringDate = "2020-03-11"; //Date时间,格式:Sun Jan 11 00:00:00 CST 2020, Date date = (Date) format.parse(stringDate); System.out.println(date); System.out.println(date.compareTo(now)); //输出-1 } }
注意,String日期格式化Date 会给他默认的时间 00:00:00
String stringDate = "2020-03-11"; //Date时间,格式:Sun Jan 11 00:00:00 CST 2020, Date date = (Date) format.parse(stringDate);
3. 使用before(); after(); 返回类型boolean
public class DateCompareTest { public static void main(String[] args) throws ParseException { SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String stringDate = "2020-03-11 12:12:11"; Date date = (Date) format.parse(stringDate); Date time = new Date(); System.out.println(date.after(time)); //输出false System.out.println(date.before(time)); //输出true } }
小知识补充
经常看到格式化有不同的写法,不仔细看,还以为他们一样,其实还是有差别的
- yyyy-MM-dd HH:mm:ss
- yyyy-MM-dd HH:mm:ssS
- yyyy-MM-dd hh:mm:ss
SimpleDateFormat 语法 | SimpleDateFormat语法解释 |
---|---|
G | 年代标志 |
y | 年 |
M | 月 |
d | 日 |
h | 时(在上午或下午1-12) |
H | 时(一天 0~23) |
m | 分 |
s | 秒 |
S | 毫秒 |
E | 星期 |
D | 一年中的第几天 |
F | 一个月的第几个星期几 |
w | 一年中的第几个星期 |
W | 一月中的第几个星期 |
a | 上午 / 下午 标记符 |
k | 时 (在一天中 1~24) |
K | 时 (在上午或下午 0~11) |
z | 时区 |
这些可以自己搭配使用
public class SimpleDateFormatTest { public static void main(String[] args) { Date now = new Date(); SimpleDateFormat format1 = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); SimpleDateFormat format2 = new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒"); SimpleDateFormat format3 = new SimpleDateFormat("yyyy年MM月dd日 一年中的第 D 天 一年中第w个星期 一月中第W个星期"); System.out.println(format1.format(now)); //输出 2020/03/12 14:38:34 System.out.println(format2.format(now)); //输出 2020年03月12日 14时38分34秒 System.out.println(format3.format(now)); //输出2020年03月12日 一年中的第 72 天 一年中第11个星期 一月中第2个星期 } }