前言
在jdk1.8以后,对表示日期时间的类型进行了重新分类,这里出现了2个新的类,Duraction 和Period
Duraction表示:时间的区间,用来度量秒和纳秒之间的时间值
Period表示:一段时间的区间,用来度量年月日和几天之间的时间值
一、Period
1、获取对象
static Period between(LocalDate startDateInclusive, LocalDate endDateExclusive)
static Period from(TemporalAmount amount)
static Period of(int years, int months, int days)
static Period ofDays(int days)
static Period ofMonths(int months)
static Period ofWeeks(int weeks)
static Period ofYears(int years)
static Period parse(CharSequence text)
2、对象信息获取
long get(TemporalUnit unit)
int getDays()
int getMonths()
List<TemporalUnit> getUnits()
int getYears()
3、对象统计
long toTotalMonths()
4、信息判断
boolean isNegative()//是否是负数
boolean isZero()//是否是0
5、计算
//加
Period plus(TemporalAmount amountToAdd)
Period plusDays(long daysToAdd)
Period plusMonths(long monthsToAdd)
Period plusYears(long yearsToAdd)
//减
Period minus(TemporalAmount amountToSubtract)
Period minusDays(long daysToSubtract)
Period minusMonths(long monthsToSubtract)
Period minusYears(long yearsToSubtract)
//乘
Period multipliedBy(int scalar)
4、自定义
Period withDays(int days)//创建一个新的Period,除了天数自定义,其他的引用其创建的对象的值
Period withMonths(int months)//创建一个新的Period,除了月数自定义,其他的引用其创建的对象的值
Period withYears(int years)//创建一个新的Period,除了年数自定义,其他的引用其创建的对象的值
Period negated()//取其相反数
Period normalized()//一个基于此Period的期间,超额月份标准化为年,但不会维护天数
二、Duration
1、返回对象
static Duration between(Temporal startInclusive, Temporal endExclusive)
static Duration from(TemporalAmount amount)
static Duration of(long amount, TemporalUnit unit)
static Duration ofDays(long days)
static Duration ofHours(long hours)
static Duration ofMillis(long millis)
static Duration ofMinutes(long minutes)
static Duration ofNanos(long nanos)
static Duration ofSeconds(long seconds)
static Duration ofSeconds(long seconds, long nanoAdjustment)
static Duration parse(CharSequence text)
案例
Instant start = Instant.parse("2017-10-03T10:15:30.00Z");
Instant end = Instant.parse("2017-10-03T10:16:30.00Z");
Duration duration = Duration.between(start, end);
System.out.println(duration);//PT1M
System.out.println(duration.getSeconds());//60
2、Duration对象信息获取
int getNano()
long getSeconds()
long get(TemporalUnit unit)
List<TemporalUnit> getUnits()
3、对象统计
long toDays()
long toHours()
long toMillis()
long toMinutes()
long toNanos()
问题1、toNanos() 与 getNano() 不同
toNanos() 获得的是 Duration 整个时间共有多少纳秒,
而 getNano() 只是获得这段时间中小于一秒的部分。
Instant start = Instant.parse("2017-10-03T10:15:30.00Z");
Instant end = Instant.parse("2017-10-03T10:16:30.00Z");
Duration duration = Duration.between(start, end);
System.out.println(duration.getNano());//0
System.out.println(duration.toNanos());//60000000000
4、对象判断
boolean isNegative()//是否是负数(不包括0)
boolean isZero()//是否是0
int compareTo(Duration otherDuration)
5、计算
//加
Duration plus(Duration duration)
Duration plus(long amountToAdd, TemporalUnit unit)
Duration plusDays(long daysToAdd)
Duration plusHours(long hoursToAdd)
Duration plusMillis(long millisToAdd)
Duration plusMinutes(long minutesToAdd)
Duration plusNanos(long nanosToAdd)
Duration plusSeconds(long secondsToAdd)
//减
Duration minus(Duration duration)
Duration minus(long amountToSubtract, TemporalUnit unit)
Duration minusDays(long daysToSubtract)
Duration minusHours(long hoursToSubtract)
Duration minusMillis(long millisToSubtract)
Duration minusMinutes(long minutesToSubtract)
Duration minusNanos(long nanosToSubtract)
Duration minusSeconds(long secondsToSubtract)
//乘
Duration multipliedBy(long multiplicand)
//除
Duration dividedBy(long divisor)
6、自定义
Duration abs()//取绝对值
Duration negated()//取其相反数
Duration withNanos(int nanoOfSecond)//创建一个新的Duration其seconds部分是我们自定义的,nanos部分是使用原来的
Duration withSeconds(long seconds)//创建一个新的Duration,其seconds部分是原来的,nanos部分是我们自定义的