最近做项目的时候,对时间类的使用还不是很熟练,看书再总结一下。
java.util.Date 类
Date类内部保存了现在到1970.1.1.00.00.00 UTC之间的毫秒数,并且把这个毫秒数换算成年月日时分秒供开发者使用。该类设计有一定的缺陷,不推荐使用。
1.构造器
Date():生成一个代表当前日期的Date对象。底层调用System.currentTimeMillis()获得long整数作为当前日期。
Date(long date):根据制定的long型整数生成Date对象。
2.方法
long getTime():返回该时间从1970-01-01 00:00:00 到Date对象的时间差。
void setTime(long time): 设置Date对象的时间
boolean after(Date when): 判断当前时间是否在制定时间when之后
boolean before(Date when):判断当前时间是否在指定时间when之前
测试
public class test{
public static void main(String[] args){
Date date1 = new Date();
System.out.println(date1);
Date date2 = new Date(System.currentTimeMillis()+1000); //当前时间+1秒
System.out.println(date2);
System.out.println(date2.getTime());
System.out.println(date1.after(date2));
System.out.println(date1.before(date2));
Date date3 = newe Date();
date3.setTime(1000+date3.getTime());
System.out.println(date3);
}
}
输出:
Thu Nov 30 13:21:57 CST 2017
Thu Nov 30 13:21:58 CST 2017
1512019318386
false
true
Thu Nov 30 13:21:58 CST 2017
Date这个类责任不清晰,既表示日期,还表示时间,打印时还会打印出时区。这真的是个很糟糕的设计。
然后Java又设计了calendar类,这个类设计依然很烂。。就不赘述了
Java.time
Java8 专门新增了一个java.time包,该包包含了如下常用的类。
有四个核心类,
java.time.LocalDate(只表示日期,不包含时区信息)
java.time.LocalTime(只表示时间,不包含时区信息)
java.time.LocalDateTime (大概相当于java.util.Date,不包含时区信息,而且可以进行加减操作)。
java.time.ZonedDateTime(大概相当于java.util.Calendar)
简要地说:日期,时间和时区终于区分开来了。