在Java 8以前,日期和时间处理一直被广大java程序员抱怨太难用,首先是java.util
和java.sql
中,都包含Date
类,如果要处理由java.text.DateFormat
类处理。同时java.util.Date
中既包含了日期,又包含了时间,所以java 8新的日期和时间库,很好的解决了以前日期和时间类的很多弊端。并且也借鉴了第三方库joda
很多的优点。
对比旧的日期API
Java.time | java.util.Calendar以及Date |
---|---|
流畅的API | 不流畅的API |
实例不可变 | 实例可变 |
线程安全 | 非线程安全 |
新API介绍
1、主要的类:
java.time
包下的类:
1 | Instant:时间戳 |
以及java.time.format
包下的类:
1 | DateTimeFormatter:时间格式化 |
2、主要的类的值的格式:
3、通过例子来看如何使用java8新的日期时间库
(1) 获取今天的日期
1 | LocalDate todayDate = LocalDate.now(); |
(2) 指定日期,进行相应操作
1 | //取2016年10月的第1天 |
(3) 生日检查或者账单日检查
1 | 开发过程中,经常需要为过生日的用户送上一些祝福,例如,用户的生日为1990-10-12,如果今天是2016-10-12,那么今天就是用户的 |
(4) 获取当前的时间
1 | 时间主要是使用LocalTime,该类不包含日期,只有时间信息 |
(5) 日期前后比较
1 | 比较2个日期哪个在前,哪个在后,java8 LocalDate提供了2个方法,isAfter(),isBefore |
(6) 处理不同时区的时间
1 | java8中,将日期、时间,时区都很好的进行了分离。 |
(7) 比较两个日期之前时间差
1 | 在项目中,经常需要比较两个日期之间相差几天,或者相隔几个月,我们可以使用java8的Period来进行处理。 |
(8) 日期时间格式解析、格式化
1 | 在java8之前,我们进行时间格式化主要是使用SimpleDateFormat,而在java8中,主要是使用DateTimeFormatter,java8中,预定 |
(9) java8 时间类与Date类的相互转化
1 | 在转换中,我们需要注意,因为java8之前Date是包含日期和时间的,而LocalDate只包含日期,LocalTime只包含时间,所以与Date在 |