在Java8之前,日期时间API一直被开发者诟病,包括:java.util.Date是可变类型,SimpleDateFormat非线程安全等问题。故此,Java8引入了一套全新的日期时间处理API,新的API基于ISO标准日历系统。在Java8之前,日期时间API一直被开发者诟病,包括:java.util.Date是可变类型,SimpleDateFormat非线程安全等问题。
LocalDate、LocalTime、LocalDateTime
这三个类的实例是不可变的对象,分别表示日期,时间,日期和时间。它们提供了简单的日期或者时间,并不包含当前的时间是信息,也不包含与时区相关的信息。
通过这几个类我们在开发中可以很轻松的获取到年月日等信息。就不需要再使用SDF了
LocalDate:常用方法
LocalDate.now(); 获取系统当前时间,返回值还是LocalDate
LocalDate.of() : 获取指定的时间
getDayOfWeek() :获取今天是这周星期几(枚举类型) 如周四 :THURSDAY
getDayOfYear() :获取今天是今年的第几天
getDayOfMonth():获取今天是这个月的几号
getYear() :获取年
getMonth() : 获取月份对象(枚举) 如 :四月APRIL
getMonthValue() : 获取月的值
plusDays(n) : 加N天
plusWeeks(n) : 加N星期
plusMonths(n) : 加N月
plusYears(n) : 加N年
minusDays(n) : 减n天
minusWeeks(n) : 减n周
minusMonths(n) :减n月
minusYears(n) : 减n年
Period period = Period.between(ld1,ld2); 获取两个日期之间的间隔
period.getDays(); 获取两个日期相差的天数
period.getMonths(); 获取两个日期相差的月
period.getYears(); 获取两个日期相差的年
LocalTime、LocalDateTime的常用方法与LocalDate一样,只不过是精确到天还是精确到小时秒的问题。
Instant
Instant : 时间戳(以Unix元年 1970年1月1日 00:00:00到某个时间毫秒值)
注意:是以本初子午线来计算的,我国时间是以北京时间计算,北京对于本初子午线属于东八区,我们需要转换
Instant.now() : 获取当前时间,已0°经线计算
now.atOffset() : 获取偏移量时间
toEpochMilli() : 转成毫秒时间
Duration duration = Duration.between(instant1, instant2); 获取两个时间的间隔
duration.getSeconds() : 两个时间间隔的秒数
duration.toMillis() : 两个时间间隔的毫秒数
duration.toDays() : 两个时间间隔的天数
duration.toHours() : 两个时间间隔的小时数
时间校正器
TemporalAdjuster (接口): 时间校正器
在实际工作中,我们对于时间的操作业务有很多,比如:将日期调整到下一个周日等操作
我们可以通过TemporalAdjusters 工具类进行操作
代码示例:将时间调整为下周一
日期格式化
DateTimeFormatter : 日期格式化类
日期格式化有默认的一些类型,但更多时候我们会用自定义的一些格式,比如yyyy-mm-dd等等
比如 : DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd");
dtf.format(); 将日期转成字符串
dtf.parse() : 将字符串转成日期
从前面我们学到的关于日期的很多操作确实非常好,各种计算,各种操作等等,但是有时候我们还是需要转换成Date来进行使用。
Date 转 LocalDateTime
LocalDateTime 转Date