五分钟了解JDK1.8新的时间类的用法

众所周知,JDK8以前使用日期主要是Date类,以及Calendar类,同时,也有一部分用户使用的是joda工具包Joda官网,现在JDK1.8将Joda部分特性以及工具类集成到了1.8中,下面就来简单介绍。

 它主要是在 java.time 包下。

核心:

  1. chrono :这个包为非ISO的日历系统定义了一些泛化的API。
  2. format : 这个包主要是格式化日期的各类API。
  3. temporal :一部分静态API,用于找到一些特定的日期的API。
  4. zone : 包含各种支持的时区的API。

常用的几个类:

LocalTime 仅包含时分秒毫秒:22:02:18.668

LocalDate 仅包含日期: 2019-06-02

LocalDateTime 包含日期+时分秒 2019-06-02T22:02:18.668

Instant 时间戳 2019-06-02T14:02:18.668Z

   注意:通过这种方式获取的时间戳是英国格林尼治时间,与中国的时区的时差是相差八小时,即 北京时间=格林尼治时间+8小时。

这里也可以使用调整ZoneId的方式,来修改当前的时区。

ZoneId shanghaiTimeZone = ZoneId.of("Asia/Shanghai");
ZonedDateTime zonedDateTime = Instant.now().atZone(shanghaiTimeZone);
国际时区 TimeZone ID列表


TemporalAdjusters 提供了大量API,获取到指定的特殊日期
Period 将一个时间或两个时间转为具体的时期(年,月,日,小时,分钟)
DateTimeFormatter 根据传入的pattern格式化日期。

  

用法

1.格式化输出时间

    DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
    LocalDateTime now = LocalDateTime.now();
    String nowStr = now.format(dateTimeFormatter);
    System.out.println(nowStr);

2.求出两个时间相差多少年,多少天,多少小时,多少分

//这种比较仅针对每一项单独的比较
LocalDate localDate = LocalDate.of(1999,12,31);
LocalDate now = LocalDate.now();
Period between = Period.between(localDate, now);
System.out.println("相距"+between.getYears()+"年");
System.out.println("相距"+between.getMonths()+"月");
System.out.println("相距"+between.getDays()+"日");
// 直接使用日期类中的方法计算日期间隔
long years = localDate.until(now, ChronoUnit.YEARS);
System.out.println("间隔的年数:" + years);
long months = localDate.until(now, ChronoUnit.MONTHS);
System.out.println("间隔的月数:" + months);
long days = localDate.until(now, ChronoUnit.DAYS);
System.out.println("间隔的天数:" + days);
long weeks = localDate.until(now, ChronoUnit.WEEKS);
System.out.println("间隔的周数:" + weeks);

结果:

相距19年
相距5月
相距2日
----------------------
间隔的年数:19
间隔的月数:233
间隔的天数:7093
间隔的周数:1013

3.求出当前月的第一天,当前时间的这一年最后一天,当前时间下一年的第一天

LocalDateTime now = LocalDateTime.now();
System.out.println("当前时间:"+now);
//当前时间月的第一天
LocalDateTime firstDayOfMonth = now.with(TemporalAdjusters.firstDayOfMonth());
System.out.println("当前时间月的第一天:"+firstDayOfMonth);
//当前时间年的最后一天
LocalDateTime lastDayOfYear = now.with(TemporalAdjusters.lastDayOfYear());
System.out.println("当前时间年的最后一天:"+lastDayOfYear);
LocalDateTime firstDayOfNextYear = now.with(TemporalAdjusters.firstDayOfNextYear());
System.out.println("当前时间下一年的第一天:"+firstDayOfNextYear);

结果:

当前时间:2019-06-02T23:23:15.295
当前时间月的第一天:2019-06-01T23:23:15.295
当前时间年的最后一天:2019-12-31T23:23:15.295
当前时间下一年的第一天:2020-01-01T23:23:15.295

未完 

参考:

https://www.cnblogs.com/woshimrf/p/java8-date-api.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值