Java8的时间日期API
原先的时间 api 大部分已经过时了
Date构造器 需要传入年月日 但是对时间的加减操作比较麻烦
Calenda 加减比较方便
使用 LocalDate、 LocalTime、 LocalDateTime
LocalDate、 LocalTime、 LocalDateTIme 类的实例是不可变的对象。分别使用ISO-8601日历系统的日期、时间、日期和时间。他们提供了简单的日期或时间,并不包含当前的时间信息。也不包含与时区相关的信息。
他们的使用方式一一模一样,但是专一程度不一样。专门表示日期,专门表示时间,表示时间好日期
加减操作时候,有很多API可以使用的。根据情况场景自己选择。
加法操作
减法操作:
@Test public void test1(){ //方式一 LocalDateTime dateTime1 = LocalDateTime.now(); System.out.println(dateTime1); //方式二 LocalDateTime dateTime2 = LocalDateTime.of(2018, 05, 21, 13, 22, 33); System.out.println(dateTime2); //获取的操作 System.out.println( dateTime1.getYear()); System.out.println(dateTime1.getHour()); }
以上是人读的,下面是计算机读的:
Instant: 时间戳
Unix元年, 1970年1月1日00:00:00 到某个时间之间的毫秒值
@Test public void test(){ Instant now = Instant.now(); //默认是获取的 UTC 时区 System.out.println(now); OffsetDateTime offsetDateTime = now.atOffset(ZoneOffset.ofHours(8));//相差8个时区的情况 System.out.println(offsetDateTime); //各种属性值的获取 System.out.println(now.getEpochSecond()); //1000s Instant instant = Instant.ofEpochSecond(1000); //从unix时间开始加1000秒 System.out.println(instant); }
补充:
API获取个各种属性
计算两个时间的间隔:
Duration: 计算两个时间之间的间隔
Period: 计算两个日期之间的间隔
@Test public void test3() throws InterruptedException { Instant now1 = Instant.now(); Thread.sleep(1000); Instant now2 = Instant.now(); //计算两个时间戳的间隔 Duration between = Duration.between(now1, now2); System.out.println(between.getSeconds());
这块儿API很多:
duration也有很多API可以调用的!可以做加减运算!
@Test public void test3() throws InterruptedException { Instant now1 = Instant.now(); Thread.sleep(1000); Instant now2 = Instant.now(); //计算两个时间戳的间隔 Duration between = Duration.between(now1, now2); System.out.println(between.getSeconds()); LocalTime now3 = LocalTime.now(); Thread.sleep(1000); LocalTime now4 = LocalTime.now(); System.out.println(Duration.between(now3, now4).toMillis()); }
日期的间隔:
@Test public void test4(){ LocalDate of = LocalDate.of(2016, 2, 5); LocalDate now = LocalDate.now(); Period between = Period.between(now, of); System.out.println(between); System.out.println(between.getYears()); System.out.println(between.getMonths()); }
获取当前月的第一天和最后一天
LocalDateTime date = LocalDateTime.now(); LocalDateTime firstday = date.with(TemporalAdjusters.firstDayOfMonth()); LocalDateTime lastDay = date.with(TemporalAdjusters.lastDayOfMonth()); System.out.println(“firstday:” + firstday); System.out.println(“lastDay:” + lastDay);