JDK8是java中具有里程碑意义的一个版本,在这个版本中增加Stream流,Lambda表达式和关于时间的LocalDate、LocalTime、LocalDateTime类。它们极大方便我们对java语言的运用,下面,我们就来介绍一下JDK8时间类的使用。
LocalDate类、LocalTime类、LocalDateTime类这三个类大部分方法是一样的,以下文章大部分使用LocalDate类举例说明其用法。
static LocalDate now() 从系统时钟获取现在时间
LocalDate localDate = LocalDate.now();static LocalDate parse(CharSequence text) 字符串解析日期,默认格式yyyy-MM-dd
String DateStr1="2019-04-10"; LocalDate analyseDate1 = LocalDate.parse(DateStr1);static LocalDate parse(CharSequence text , DateTimeFormatter formatter)
String DateStr2="20190410"; LocalDate analyseDate2 = LocalDate.parse(DateStr2, DateTimeFormatter.BASIC_ISO_DATE);String format(DateTimeFormatter formatter)
LocalDate localDate = LocalDate.now(); DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyyMMdd"); String formatDate = dtf.format(localDate);int getYear() ,获取日期对象的年
int year = localDate.getYear();Month getMonth(),获取日期对象的月的英文
Month mouth = localDate.getMonth();int getMonthValue(), 获取日期对象的月
int month = localDate.getMonthValue();int getDayOfMonth(), 获取日期对象在它的月中是第几天
int day = localDate.getDayOfMonth();int getDayOfYear() , 获取日期对象在它那一年是第几天的月中是第几天
int day = localDate.getDayOfYear();int getDayOfWeek(), 获取日期对象的星期
int day = localDate.getDayOfWeek();String toString() 获取字符串类型的日期,例如:2020-09-04
String date = localDate.toString();boolean isLeapYear(),判断日期对象所在的年是否为闰年
boolean flag = localDate.isLeapYear();boolean isBefore(LocalTime other) ,判断是否在给定时间对象之前
boolean flag = localDate.isBefore(analyseDate1);boolean isAfter(LocalTime other),判断是否在给定时间对象之后
boolean flag = localDate.isAfter(analyseDate1);boolean isEqual(ChronoLocalDate other),判断是否在给定时间对象是否相等
boolean flag =localDate.isEqual(analyseDate1);LocalDate plus(long amountToAdd, TemporalUnit unit) ,返回当前对象加上一定日期后的新的日期对象,第一个参数是多少,第二个参数是单位
当前日期对象两天后的日期: localDate.plus(2, ChronoUnit.DAYS) 当前日期对象两天前的日期: localDate.plus(-2, ChronoUnit.DAYS) 当前日期对象一周后的日期: localDate.plus(1, ChronoUnit.WEEKS) 当前日期对象一周前的日期: localDate.plus(-1, ChronoUnit.WEEKS)LocalDate plusDays(long daysToAdd),返回当前对象加上一些天数后的新的日期对象
当前日期对象一天前的日期: localDate.plusDays(-1)LocalDate plusWeeks(long weeksToAdd), 返回当前对象加上一些周数后的新的日期对象
当前日期对象一周前的日期: localDate.plusWeeks(-1)LocalDate plusMonths(long monthsToAdd),返回当前对象加上一些月数后的新的日期对象
当前日期对象一月前的日期: localDate.plusMonths(-1)LocalDate plusYears(long yearsToAdd),返回当前对象加上一些年数后的新的日期对象
当前日期对象一年前的日期: localDate.plusYears(-1)LocalDate withMonth(int month) ,修改日期的月
修改日期的月,改成3月:localDate.withMonth(3)LocalDate withYear(int year),修改日期的年
修改日期的年,改成2018年:localDate.withYear(2018)LocalDate withDayOfMonth(int dayOfMonth),修改成当月的第几日
修改成当月的第2日:localDate.withDayOfMonth(2)LocalDate withDayOfYear(int dayOfYear),修改成当年的第几日
修改成当年的第2日:localDate.withDayOfYear(2)用来计算两个LocalTime对象或者两个两个LocalDateTime对象之间相差的时间,这里用LocalDateTime 来举例说明。
LocalDateTime localDateTime1 = LocalDateTime.of(2020, 09, 04, 12, 32, 16); LocalDateTime localDateTime2 = LocalDateTime.of(2020, 09, 02, 12, 32, 16);static Duration between(Temporal startInclusive, Temporal endExclusive),根据两个LocalTime或者两个LocalDateTime创建Duration对象,参数,前小后大算出来正数,否则算出来负数
Duration duration = Duration.between(localDateTime1, localDateTime2); 将差值转换为天数返回: duration.toDays()) 将差值转换为小时数返回: duration.toHours() 将差值转换为分钟数返回: duration.toMinutes() Duration对象转换成的秒数: duration.getSeconds() 将差值转换为毫秒数返回: duration.toMillis()用来计算两个LocalDate相差的时间
LocalDate localDate1 = LocalDate.of(2019, 02, 17); LocalDate localDate2 = LocalDate.of(2020, 04, 16);static Period between(LocalDate startDateInclusive, LocalDate endDateExclusive),根据给定的两个LocalDate对象创建Period对象,参数前小后大,算出来的为正,否则算出来负数
Period period = Period.between(localDate1, localDate2); 返回两个localDate年的相差数: period.getYears() 返回两个localDate月的相差数: period.getMonths() 返回两个localDate天的相差数: period.getDays()获取本时区时间
ZonedDateTime zdt1 = ZonedDateTime.now();修改时区为美国的印第安纳州
ZoneId zoneChanged = ZoneId.of("US/East-Indiana");获取指定时区的时间,调用重载的now方法
ZonedDateTime zdt2 = ZonedDateTime.now(zoneChanged);时间线上的一个瞬时点,这可能用于记录应用程序的事件时间戳,Instant的精度可以达到纳秒级