常用API(JDK8时间类)(LocalDate,LocalTime,LocalDateTime,Period,Duration,ChronoUnit)
细节
- JDK8新增的时间对象都是不可变的;
- 如果我们修改了,减少了,增加了时间,那么调用者是不会发生改变的,会产生一个新的时间;
- ZoneId,Instant,ZonedDateTime类对应JDK7的Date类;
- DateTimeFormatter类对应SimpleDateFormat(日期格式化)类;
- LocalDate,LocalTime,LocalDateTime类对应Clendar(日历)类;
LocalDate,LocalTime,LocalDateTime类
概念:
LocalDate:可以单独修改、获取时间中的年、月、日
LocalTime:可以单独修改、获取时间中的时、分、秒
LocalDateTime:可以单独修改、获取时间中的年、月、日、时、分、秒
常用方法:
static XXX now() 获得本地时间的日历对象
static XXX of() 获得指定时间的对象
get开头的方法 获取日历中的年、月、日等信息
isBefore,isAfter 比较两个LocalDate
with开头的 修改时间系列的方法
minus开头的 减少时间系列的方法
plus开头的 增加时间系列的方法
具体方法:
Period类
概念: 计算时间间隔(年,月,日)
常用方法:
static Period between(LocalDate 第一个参数, LocalDate 第二个参数) 计算参数中的间隔(第二个参数减第一个参数)
int getYears() 获取间隔的年
int getMonths() 获取间隔的月
int getDays() 获取间隔的日
long toTotalMonths() 计算时间间隔的总月份
具体方法:
package com.caihongjia2.a01jdk8datedmeo;
import java.time.LocalDate;
import java.time.Period;
public class A08PeriodDemo01 {
public static void main(String[] args) {
/*
年月日
static Period between(LocalDate startDateInclusive, LocalDate endDateExclusive) 计算参数中的间隔(第二个参数减第一个参数)
int getYears() 获取间隔的年
int getMonths() 获取间隔的月
int getDays() 获取间隔的日
long toTotalMonths() 计算时间间隔的总月份
*/
//当前日期(年,月,日)
LocalDate today = LocalDate.now();
System.out.println(today);
//出生日期(年,月,日)
LocalDate birthDate = LocalDate.of(2004, 2, 15);
System.out.println(birthDate);
Period period = Period.between(birthDate, today);//第二个参数减第一个参数
System.out.println("相差的时间间隔对象:"+period);
System.out.println(period.getYears()+"年");
System.out.println(period.getMonths()+"月");
System.out.println(period.getDays()+"日");
System.out.println(period.toTotalMonths());//把时间间隔的总月份计算出来;
}
}
Duration类
概念: 计算时间间隔(秒,纳秒)
常用方法:
static Duration between(Temporal 第一个参数, Temporal 第二个参数) 计算参数中的间隔(第二个参数减第一个参数)
long toXXX() 返回两个时间差的对应数(天,小时,分钟,毫秒,纳秒等)
具体方法:
package com.caihongjia2.a01jdk8datedmeo;
import java.time.Duration;
import java.time.LocalDate;
import java.time.LocalDateTime;
public class A09DurationDemo01 {
public static void main(String[] args) {
/*
秒,纳秒
static Duration between(Temporal startInclusive, Temporal endExclusive) 计算参数中的间隔(第二个参数减第一个参数)
long toXXX() 返回两个时间差的对应数(天,小时,分钟,毫秒,纳秒等)
*/
//当前日期(年,月,日)
LocalDateTime today = LocalDateTime.now();
System.out.println(today);
//出生日期(年,月,日)
LocalDateTime birthDate = LocalDateTime.of(2004, 2, 15,0,00,00);
System.out.println(birthDate);
Duration duration = Duration.between(birthDate, today);
System.out.println("相差的时间间隔对象:"+duration);//PT169055H46M14.4565164S
System.out.println("=====================================");
System.out.println(duration.toDays());//两个时间差的天数
System.out.println(duration.toHours());//两个时间差的小时
System.out.println(duration.toMinutes());//两个时间差的分钟数
System.out.println(duration.toMillis());//两个时间差的毫秒数
System.out.println(duration.toNanos());//两个时间差的纳秒数
System.out.println(duration.toSeconds());//两个时间差的秒数
}
}
ChronoUnit类
概念: 计算时间间隔(所有单位)
常用方法:
long between(Temporal 第一个参数, Temporal 第二个参数) 计算参数中的间隔(第二个参数减第一个参数)
使用类名调用对应的常量,再用常量调用between方法
具体方法:
package com.caihongjia2.a01jdk8datedmeo;
import java.time.LocalDateTime;
import java.time.temporal.ChronoUnit;
public class A10ChronoUnitDemo01 {
public static void main(String[] args) {
/*
所有单位
long between(Temporal 第一个参数, Temporal 第二个参数) 计算参数中的间隔(第二个参数减第一个参数)
使用类名调用对应的常量,再用常量调用between方法
*/
//当前日期(年,月,日)
LocalDateTime today = LocalDateTime.now();
System.out.println(today);
//出生日期(年,月,日)
LocalDateTime birthDate = LocalDateTime.of(2004, 2, 15,0,00,00);
System.out.println(birthDate);
System.out.println("相差的年数"+ ChronoUnit.YEARS.between(birthDate,today));
System.out.println("相差的月数"+ ChronoUnit.MONTHS.between(birthDate,today));
System.out.println("相差的周数"+ ChronoUnit.WEEKS.between(birthDate,today));
System.out.println("相差的天数"+ ChronoUnit.DAYS.between(birthDate,today));
System.out.println("相差的时数"+ ChronoUnit.HOURS.between(birthDate,today));
System.out.println("相差的分数"+ ChronoUnit.MONTHS.between(birthDate,today));
System.out.println("相差的秒数"+ ChronoUnit.SECONDS.between(birthDate,today));
System.out.println("相差的毫秒数"+ ChronoUnit.MILLIS.between(birthDate,today));
System.out.println("相差的微秒数"+ ChronoUnit.MICROS.between(birthDate,today));
System.out.println("相差的纳秒数"+ ChronoUnit.NANOS.between(birthDate,today));
System.out.println("相差的半天数"+ ChronoUnit.HALF_DAYS.between(birthDate,today));
System.out.println("相差的十年数"+ ChronoUnit.DECADES.between(birthDate,today));
System.out.println("相差的世纪(百年)数"+ ChronoUnit.CENTURIES.between(birthDate,today));
System.out.println("相差的千年数"+ ChronoUnit.MILLENNIA.between(birthDate,today));
System.out.println("相差的纪元数"+ ChronoUnit.ERAS.between(birthDate,today));
}
}