简介: Date类是从JDK1.1就开始存在的老类,其提供了针对日期进行操作的诸多方法,但其却一直饱受诟病,不同的起始编号,国际化的低支持,JDK官方也认识到这个问题,后台提出使用Calendar类进行日期操作,日期的格式化交给DateFormat,虽然我们已经不再使用Date类中的大多数方法,但是还有一部分保留的内容指的我们一谈。
Date类实例化对象方法:
分为对构造函数赋参和不赋参,不赋参构造函数会将当前日期和时间转化为Date对象,赋参构造函数会将指定的毫秒值封装为Date对象
Date date = new Date();
System.out.println(date);
long time = System.currentTimeMillis();
date = new Date(time);
System.out.println(date);
我们先对一个Date对象进行无参初始化,然后调用System的读秒函数,对这个Date对象重新进行有参初始化,得到结果相同
Mon Nov 20 21:16:41 CST 2017
分析打印的Date对象的哈希值:
dow son dd:mm:ss zzz yyyy
dow:一周中的第几天
son:一年中的第几月
dd:一个月中的第几天
hh:小时
mm:分钟
ss:秒
zzz:时区
yyyy:年份
毫秒值和日期对象之间的转化:
毫秒值->日期对象:
1.通过Date对象的构造方法new Date(timeMills)实现
Date date = new Date(System.currentTimeMillis());
2.通过setTime方法实现
Date date = new Date();
System.out.println(date);
date.setTime(1);
System.out.println(date);
Mon Nov 20 21:27:11 CST 2017
Thu Jan 01 08:00:00 CST 1970
日期对象->毫秒值
通过getTime()方法实现
Date date = new Date();
System.out.println(date);
System.out.println(date.getTime());
Mon Nov 20 21:28:56 CST 2017
1511184536295
日期对象的格式化
将日期对象转化为日期格式的字符串
使用的是DateFormat类的format方法
步骤:
1.获取一个Date对象
2.获取日期格式对象,具备默认风格,FULL,LONG等可以指定风格
3,通过DateFormat类的format(date)方法对字符串进行对应格式赋值,参数为对应的日期对象
Date date = new Date();
//DateFormat.getDateInstance()为一个静态工厂方法,通过工厂返回所需要的对象
DateFormat df = DateFormat.getDateInstance();
System.out.println(df.format(date));
2017-11-20
静态工厂方法可以有参数指定风格
DateFormat df = DateFormat.getDateInstance(DateFormat.FULL);
2017年11月20日 星期一
getDateInstance()方法返回日期
getDateTimeInstance()方法返回日期加时间
DateFormat df = DateFormat.getDateTimeInstance();
System.out.println(df.format(date));
df = DateFormat.getDateTimeInstance(DateFormat.FULL, DateFormat.LONG);
System.out.println(df.format(date));
2017-11-20 21:41:50
2017年11月20日 星期一 下午09时41分50秒
如果输出风格是自定义的,可以通过DateFormat的实现类SimpleDateFormat()实现
DateFormat sdf = new SimpleDateFormat("yyyy-mm-dd");
System.out.println(sdf.format(date));
2017-10-21
将日期格式的字符串转成日期对象
使用的是DateFormat中的parse()
需要抛出一个异常ParseException,维护传入参数格式
String strTime = "2017-11-21";
DateFormat df = DateFormat.getDateInstance();
Date date = df.parse(strTime);
System.out.println(date);
Tue Nov 21 00:00:00 CST 2017
如果想要获取日期和时间,也可以用getDateTimeInstance()工厂方法,但要注意传入参数的格式,不然会报异常
String strTime = "2017-11-21 14:16:25";
DateFormat df = DateFormat.getDateTimeInstance();
Tue Nov 21 14:16:25 CST 2017
相同的,可以采用自定义的方法生成Date对象
String strTime = "2017年6月11日";
DateFormat df = new SimpleDateFormat("yyyy年MM月DD日");
日期对象之间具有比较性
after,before,equals 返回类型均为布尔类型
Date date1 = new Date(1);
Date date2 = new Date(2);
System.out.println(date1.equals(date2));
System.out.println(date1.after(date2));
System.out.println(date1.before(date2));
false
false
true
总结:Date类现在并不推荐使用,Java推荐了Calendar和DateFormat,甚至SimpleDateFormat来替代它,Date中仅剩的几个方法仍然还很实用,尤其是before与after方法,可以很方便的判断两个时间点的先后,当然判断的条件是将你的时间转换成Date格式,使用Date剩余的两个构造器实现即可,当然也可以使用推荐的SimpleDateFormat方法进行简单的格式化日期格式字符串的方式得到Date格式的时间点