JDK8新增了哪些日期与时间类?如何去使用它们?

为了满足更多的需求,JDK 8中新增了一个java.time包,在该包下包含了更多的日期和时间操作类,其常用类如表1所示。

表1 JDK 8新增日期、时间常用类

类名功能描述
Clock用于获取指定时区的当前日期、时间。
DayOfWeek枚举类,定义了一周七天周一到周日的枚举值
Duration表示持续时间。该类提供的ofXxx()方法用于获取指定的时间的小时、分钟、秒数等。
Instant表示一个具体时刻,可以精确到纳秒。该类提供了静态的now()方法来获取当前时刻,提供了静态的now(Clock clock)方法来获取clock对应的时刻。同时还提供了一系列的plusXxx()方法来获取当前时刻基础上加上一段时间,以及一系列的minusXxx()方法在当前时刻基础上减去一段时间。
LocalDate表示不带时区的日期,如2018-01-27。该类提供了静态的now()方法来获取当前日期,提供了静态的now(Clock clock)方法来获取clock对应的日期。同时还提供了一系列的plusXxx()方法在当前年份基础上加上几年、几月、几日等,以及一系列的minusXxx()方法在当前年份基础上减去几年、几月、几日等。      
LocalTime表示不带时区的时间,如14:49:20。该类提供了静态的now()方法来获取当前时间,提供了静态的now(Clock clock)方法来获取clock对应的时间。同时还提供了一系列的plusXxx()方法在当前年份基础上加上几小时、几分、几秒等,以及一系列的minusXxx()方法在当前年份基础上减去几小时、几分、几秒等。
LocalDateTime表示不带时区的日期、时间。该类提供了静态的now()方法来获取当前日期、时间,提供了静态的now(Clock clock)方法来获取clock对应的日期、时间。同时还提供了一系列的plusXxx()方法在当前年份基础上加上几年、几月、几日、几小时、几分、几秒等,以及一系列的minusXxx()方法在当前年份基础上减去几年、几月、几日、几小时、几分、几秒等。
Month枚举类,定义了一月到十二月的枚举值
MonthDay表示月日,如--01-27。该类提供了静态的now()方法来获取当前月日,提供了静态的now(Clock clock)方法来获取clock对应的月日。
Year表示年,如2018。该类提供了静态的now()方法来获取当前年份,提供了静态的now(Clock clock)方法来获取clock对应的年份。同时还提供了plusYears()方法在当前年份基础上增加几年,以及minusYears()方法在当前年份基础上减去几年。
YearMonth表示年月,如2018-01。该类提供了静态的now()方法来获取当前年月,提供了静态的now(Clock clock)方法来获取clock对应的年月。同时还提供了plusXxx()方法在当前年月基础上增加几年、几月,以及minusXxx()方法在当前年月基础上减去几年、几月。
ZoneId表示一个时区
ZonedDateTime表示一个时区化的日期、时间

了解了上述各个类的作用后,接下来通过一个具体的案例来演示这些类的用法,如文件1所示。

文件1 Example23

     import java.time.*;
     public class Example23 {
         public static void main(String[] args) {
             // 1、Clock的使用
             Clock clock = Clock.systemUTC();
             System.out.println("获取UTC时区转换的当前时间:" + clock.instant());
             System.out.println("获取UTC时区转换的的毫秒数:" + clock.millis());
             // 2、Duration的使用
             Duration d = Duration.ofDays(1);
             System.out.println("一天等于" + d.toHours() +"小时");
             System.out.println("一天等于" + d.toMinutes() +"分钟");
             System.out.println("一天等于" + d.toMillis() +"秒");
             // 3、Instant的使用
             Instant instant = Instant.now();
             System.out.println("获取UTC时区的当前时间为:" + instant);
             System.out.println("当前时间一小时后的时间为:" 
                                    + instant.plusSeconds(3600));
             System.out.println("当前时间一小时前的时间为:" 
                                    + instant.minusSeconds(3600));
             // 4、LocalDate的使用
             LocalDate localDate = LocalDate.now();
             System.out.println("从默认时区的系统时钟获得当前日期:" + localDate);
             // 5、LocalTime的使用
             LocalTime localTime = LocalTime.now();
             System.out.println("从默认时区的系统时钟获取当前时间:" + localTime);
             // 6、LocalDateTime的使用
             LocalDateTime localDateTime = LocalDateTime.now();
             System.out.println("从默认时区的系统时钟获取日期、时间:"
                                     + localDateTime);
             LocalDateTime times = localDateTime.plusDays(1)
                                 .plusHours(3).plusMinutes(30);
             System.out.println("当前的日期、时间加上1天3小时30分之后:" + times);
             // 7、Year、YearMonth、MonthDay的使用
             Year year = Year.now();
             System.out.println("当前年份为:" + year);
             YearMonth yearMonth = YearMonth.now();
             System.out.println("当前年月为:" + yearMonth);
             MonthDay monthDay = MonthDay.now();
             System.out.println("当前月日为:" + monthDay);
             // 8、 获取系统默认时区
             ZoneId zoneId = ZoneId.systemDefault();
             System.out.println("当前系统默认时区为:" + zoneId);
         }
     }

运行结果如图1所示。

图1 运行结果

文件1中,演示了JDK 8新增日期时间、包中类的一些用法。需要注意的是,从图5-23可以看出,通过clock.instant()和Instant.now()获取的当前时间与本地系统显示时间有8个小时的时差,这是因为Instant默认使用的是UTC(Universal Time Coordinated)世界协调时间,又称世界标准时间,UTC 提供了一种与时区无关的时间,与CST(China Standard Time)中国标准时间(北京时间)有8个小时的时差。 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值