在JDK1.7中,处理日期相关的数据我们使用java.util.Data,算得上是一个万能的接口,他包含了日期、时间、还有毫秒数。当使用他存储日期或者只存储时间,那么只有定义的人才知道哪些数据是有用的。而且在java.util.Date中的月份从0开始,一月是0,十二月是11。
在JDK1.8及以后的API中,对于时间的使用我们更加便利。新增了LocalDate、LocalTime、LocalDateTime,分别表示ISO-8601日历系统(国际标准化组织制定的现代公民的日期和时间的表示法)的日期,时间、日期和时间。他们提供简单的日期或时间,并不包含当前的时间信息,也不包含与时区相关的信息。并且他们类的实例是不可变的对象,不但线程安全,而且不能修改。
这些新增的日期时间API都在java.time包下。
LocalDate类(LocalTime类似):
1、获取对象的方法:(1)通过静态方法now:;(根据传递参数的不同可以分为三种:a.无参:在默认时区中从系统时钟获取当前日期;b.(Clock clock)从指定的时钟中获取当前日期c.(ZoneID zone)从指定时区中的系统时钟获取当前日期。)
LocalDateTime ldt = LocalDateTime.now();
、 ( 2)通过静态方法of(),指定年月日时分秒,例如:LocalDateTimeIdlt=LocalDateTime.now();
2、一些常用方法:
(1)与获取相关的方法:get系类的方法
ldt.getYear();获取年
ldt.getMinute();获取分钟
ldt.getHour();获取小时
getDayOfMonth 获得月份天数(1-31)
getDayOfYear 获得年份天数(1-366)
getDayOfWeek 获得星期几(返回一个 DayOfWeek枚举值)
getMonth 获得月份, 返回一个Month枚举值
getMonthValue 获得月份(1-12)
getYear 获得年份
(2)格式化日期字符串的方法 format() 例如:String yyyy=ldt.format(DateTimeFormatter.ofPattern("yyyy"));
(3)转换的方法:toLocalDate();to LocalTime();例如:LocalDate localDate = ldt.toLocalDate();
(4)判断的方法
isAfter()判断一个日期是否在指定日期之后 返回boolean 类型
isBefore()判断一个日期是否在指定日期之前 返回boolean 类型
isLeapYear()判断是否是闰年(这个是LocalDate类中的方法) 返回boolean类型
(5)解析的方法(静态)parse:paser() 将一个日期字符串解析成日期对象,字符串日期的写法的格式要正确,否则解析就会失败。例如: LocalDateTimeprase=LocalDateTime.parse("2017-12-03T10:15:30")
按照我们指定的格式去解析:用LocalDateTime想按照我们的自定义的格式去解析,需要注意日期字符串的年、月、日时分秒要写全,不然就会报错
例:LocalDateTime Idt4=LocalDateTime.now();
DateTimeFormatter=DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
LocalDateTime.parse("2018-01-21 20:30:36",formatter);
(6)添加年月日时分秒的方法:
plus系列,都会返回一个新的LocalDateTime的对象。
(7)减去年月日时分秒的方法:minus系列的方法 返回一个新的LocalDateTime对象
LocalDateTime localDateTime2 = ldt.minusYears(8);
(8)指定年月日时分秒的方法: with系列
LocalDateTime localDateTime3 =ldt.withYear(2001);