Java.util.Date是一个“万能接口”,它包含日期、时间,还有毫秒数,如果你只想用java.util.Date存储日期,或者只存储时间,那么,只有你知道哪些部分的数据是有用的,哪些部分的数据是不能用的。
1.1 Date的构造方法
Date 是我们使用的最多的一个日期类,Date提供的构造方法在官方API中有一下几种:
Date 类提供了多种构造方法,但是目前有很多方法都已经不建议使用
public Date() { this(System.currentTimeMillis()); } public Date(long date) { fastTime = date; } @Deprecated public Date(int year, int month, int date) { this(year, month, date, 0, 0, 0); } @Deprecated public Date(int year, int month, int date, int hrs, int min) { this(year, month, date, hrs, min, 0); } @Deprecated public Date(int year, int month, int date, int hrs, int min, int sec) @Deprecated public Date(String s) { this(parse(s)); }
目前我们可以通过使用:
Date date0 = new Date(); Date date1 = new Date(time);
这两种方法创建对象的不同主要是通过指定的时间戳不同,通过设置Date 中的 fastTime 进行设置Date 对象的时间。
除了使用构造方法获取实例,Date 还可以通过 Instant 来创建一个Date 实例:
Instant instant = Instant.now(); Date date = Date.from(instant);
Instant 是Java 8 提供的新特性:
1.2 Date的常用方法
Date 类中,提供了常用的获取:年,月,日,时,分,秒等方法:
Date date = new Date(); int dates = date.getDate(); int year = date.getYear(); int month = date.getMonth(); int day = date.getDay(); int hours = date.getHours(); int min = date.getMinutes(); int second = date.getSeconds(); long time = date.getTime(); int times = date.getTimezoneOffset();
输出结果:
dates: 14 year: 116 month: 11 day: 3 hours: 15 min: 8 second: 29 time: 1481699309422 times: -480
读者可能会发现,这里的年份并不是我们想要的,这里主要是因为代码方法实现:
我们可以看到,这里的getYear 并不是获取当前年份,而是获取到和1900年的差值,这里主要是因为JDK老版本遗留下来的问题,对于Date 中获取年月日的方法,现在已经不建议使用了。
Date类中也提供了一些设置日期的方法:
与上面的get方法是一一对应的,但是现在也同样不建议使用了。
1.3 Date的总结
经过我们上述的分析,我们发现,Date 类如今很多方法已经没有什么用处了,确实,如今时间的处理并不直接在Date 类中进行,而是通过Calendar,或者LocalDate 来进行,我们再日常使用中,更多的是要来做一个记录日期的实例。
2、Calendar 类介绍一下Date 与 Calendar 的区别
Date用于记录某一个含日期的、精确到毫秒的时间。重点在代表一刹那的时间本身。
Calendar用于将某一日期放到历法中的互动——时间和年、月、日、星期、上午、下午、夏令时等这些历法规定互相作用关系和互动。Calendar本身代表公历的一个简化缩水版,姑且叫“计算机历”。
完整的公历是格里高利历,Java SE中以GregorianCalendar类来提供相关的历法功能。
2.1 Calendar 的构造方法