我是靠谱客的博主 任性嚓茶,最近开发中收集的这篇文章主要介绍java8 时间类API,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

    • 前言
    • Instant
    • LocalDate
    • Clock
    • SystemnanoTime

前言

(未完待续)
推荐一篇系统学习的java8时间类文章
我这里会介绍java8 新API中常用个类怎么用 应该是所有博文中最详细的使用API
1. Instant 时间戳
2. LocalDate 日期类 不包含 时分秒 只有年月日
3. LocalTime 时间类 只包含 时分秒
4. LocalDateTime 包含以上
5. Clock 时钟
6. 纳秒 System.nanoTime

Instant

  1. 使用:
    注意:下列方法获取的时间戳和北京相差8个时区

    Instant instant = Instant.now();
    System.out.println(instant);
    //输出2016-12-04T12:37:51.995Z 和北京时间相差8个时区
    

    解决方法:

    Instant now2 = Instant.now().plusMillis(TimeUnit.HOURS.toMillis(8));

    plusMillis():增加时间戳时间 以毫秒为单位,也有增加纳秒和秒的方法
    minusNanos():增加时间戳时间 以纳秒为单位
    minusSeconds():增加时间戳时间 以秒为单位
    TimeUnit.HOURS.toMillis():将小时转化为毫秒

  2. 获取从1970 1月1日到现在的 毫秒

    Instant instant = Instant.now();
    //获取从1970 1月1日到现在的 毫秒
    System.out.println(instant.toEpochMilli());
  3. 比较时间戳谁在前谁在后

    Instant instant = Instant.now();
    
    //获得当前时间戳并且增加33毫秒
    Instant instant2 = Instant.now().plusMillis(33);
    
    //获得当前时间戳并且减少33毫秒
    Instant instant3 = Instant.now().minusMillis(33);
    
    //获取当前时间  这里应该和instant的时间戳一样
    Instant instant4 = Instant.now();
    
    //判断 instant 是否在目标时间之后这里应该是true
    System.out.println(instant.isAfter(instant3));
    
    //判断 instant 是否在目标时间之前这里应该是true
    System.out.println(instant.isBefore(instant2));
    
    //判断两个时间戳是否相等 返回true
    System.out.println(instant.equals(instant4));
  4. 获得两个时间戳相差天数或小时等

    Instant instant = Instant.now();
    
    //获得当前时间戳并且增加24小时
    //TimeUnit.HOURS.toMillis(24)将小时转毫秒
    Instant instant3 = Instant.now().plusMillis(TimeUnit.HOURS.toMillis(24));
    
    //获取相差天数 这里为返回1
    long until = instant.until(instant3, ChronoUnit.DAYS);
    
    //获取相差 这里返回小时 返回24
    long until2 = instant.until(instant3, ChronoUnit.HOURS);
    
    //获取相差 这里返回 毫秒86400000  ChronoUnit还有其他的我就不举例了
    long until3 = instant.until(instant3, ChronoUnit.MILLIS);
  5. 时间戳时差偏移和对应年月份

    Instant instant = Instant.now();
    
    //偏移时区相差30小时
    OffsetDateTime atOffset = instant.atOffset(ZoneOffset.ofHours(1));
    
    //返回偏移的时间戳 !!!!!!!!!
    //!!!!!注意这里的时间戳是原来的instant 
    //!!!!  atOffset.toInstant()==instant
    atOffset.toInstant();
    
    //获取年份
    atOffset.getYear();
    //获取月份
    atOffset.getMonth();
    //获取月份的第几天
    atOffset.getDayOfMonth();
    //获取星期中的第几天 
    atOffset.getDayOfWeek();
    //atOffset.getDayOfWeek().getValue() 对应周数的第几天
    //atOffset.getDayOfWeek()返回 英文星期几 比如 SUNDAY
    
    
    //获取在某个时差
    //UTC不做偏差ZoneId.of("Asia/Kolkata")
    ZonedDateTime atZone = instant.atZone(ZoneOffset.UTC);
    //亚洲印度
    ZonedDateTime atZone = instant.atZone(ZoneId.of("Asia/Kolkata"));
    //偏差一小时
    ZonedDateTime atZone2 = instant.atZone(ZoneOffset.ofHours(1));
    //获取时间和上面相同
  6. 创建自定义时间

    Instant instant =Instant.parse("2007-12-03T10:15:30.00Z");
  7. 获得从1970-1-1到现在偏移的时间戳

    //偏移1970-1-1 3000毫秒
    Instant.ofEpochMilli(3000);
    //偏移300秒
    Instant.ofEpochSecond(300);
  8. 获取时间戳中 今年的第一天 或者最后一天,本月第一天….等

    Instant now = Instant.now();
    
    ZonedDateTime atZone = now.atZone(ZoneOffset.UTC);
    
    //获取时间戳 中这个月的第一天的时间 如现在时间是2016 10 23-->>2016 10 1
    ZonedDateTime with = atZone.with(TemporalAdjusters.firstDayOfMonth());
    //获取时间戳 下个月的第一天的时间 如现在时间是2016 10 23  -->>2016 11 1
    ZonedDateTime with2 = atZone.with(TemporalAdjusters.firstDayOfNextMonth());
    //获取时间戳 下年的第一天 如现在时间是2016 10 23  -->>2017 1 1
    ZonedDateTime with3 = atZone.with(TemporalAdjusters.firstDayOfNextYear());
    //获取时间戳 今年第一天 如现在时间是2016 10 23  -->>2016 1 1
    ZonedDateTime with4 = atZone.with(TemporalAdjusters.firstDayOfYear());
    //获取这个这个月的第一个星期二
    ZonedDateTime with5 = atZone.with(TemporalAdjusters.firstInMonth(DayOfWeek.TUESDAY));
    //获取时间戳 本月最后一天  2016 12 23  -->>2016 12 31
    ZonedDateTime with6 = atZone.with(TemporalAdjusters.lastDayOfMonth());
    //......后面大家自行查看TemporalAdjusters
  9. 获取时间戳 转化为LocalDate 等

    Instant now = Instant.now();
    
    ZonedDateTime atZone = now.atZone(ZoneOffset.UTC);
    //转化LocalDate
    atZone.toLocalDate();
    LocalDate date = LocalDate.from(atZone);
    
    //LocalDateTime
    atZone.toLocalDateTime();
    LocalDateTime.from(atZone);
    
    //LocalDateTime
    atZone.toLocalDateTime();
    LocalDateTime.from(date);

LocalDate

其实LocalDate,LocalDateTime,LocalTime 很多方法和时间戳基本都一样 大家不妨自己试试
时间戳中有的方法这个类基本都有…

  1. 创建(时间戳的添加/减少多个小时/天数也有这里就不写了)

        //获取当前时间 已经是本地时间
        LocalDate date = LocalDate.now();
        //获取指定时间
        LocalDate date2 = LocalDate.parse("2007-12-03");
        //获取指定时间
        LocalDate date3 = LocalDate.of(2007, 12, 3);
        //获取 距离1970-1-1 后面的第三十天 1970-01-31
        LocalDate date4 =LocalDate.ofEpochDay(30);
        //获取 1112年的第12天的日期  1112-1-12
        LocalDate date5 = LocalDate.ofYearDay(1112, 12);
  2. 判断闰年

    //获取当前时间 已经是本地时间
    LocalDate date = LocalDate.now();
    
    //判断闰年
    date.isLeapYear();
  3. 两个时间的比较相差天数等

    这里和时间戳的方法都一样 不过多了一个 我这里说明下

    //获取当前时间 已经是本地时间
    LocalDate date = LocalDate.now();
    //多加111天
    LocalDate plusDays = LocalDate.now().plusDays(111);
    //特有方法
    Period until = date.until(plusDays);
    
    //比较两个时间 的月数中天数的差值!!!!坑注意了
    //如2016.3,2 和2016.5.25 那么返回 3-25=-22
    until.getDays();
    //月份相减
    until.getMonths();
    //相差年数 就是直接拿年减去
    until.getYears();
  4. 指定小时分秒

    虽然这个类不能获取到 时分秒 但是可以指定一个然后返回LocalDateTime对象(有年月日和时分秒)

    //获取当前时间 已经是本地时间
    LocalDate date = LocalDate.now();
    
    LocalDateTime atTime = date.atTime(LocalTime.now());

Clock

  //时钟提供给我们用于访问某个特定 时区的 瞬时时间、日期 和 时间的。
  Clock c1 = Clock.systemUTC(); //系统默认UTC时钟(当前瞬时时间 System.currentTimeMillis())
   System.out.println(c1.millis()); //每次调用将返回当前瞬时时间(UTC)

   Clock c2 = Clock.systemDefaultZone(); //系统默认时区时钟(当前瞬时时间)

   Clock c31 = Clock.system(ZoneId.of("Europe/Paris")); //巴黎时区
   System.out.println(c31.millis()); //每次调用将返回当前瞬时时间(UTC)

   Clock c32 = Clock.system(ZoneId.of("Asia/Shanghai"));//上海时区
   System.out.println(c32.millis());//每次调用将返回当前瞬时时间(UTC)

   Clock c4 = Clock.fixed(Instant.now(), ZoneId.of("Asia/Shanghai"));//固定上海时区时钟
   System.out.println(c4.millis());

   System.out.println(c4.millis()); //不变 即时钟时钟在那一个点不动

   Clock c5 = Clock.offset(c1, Duration.ofSeconds(2)); //相对于系统默认时钟两秒的时钟


   System.out.println(c1.millis());
   System.out.println(c5.millis());

System.nanoTime

获取当前的纳秒.System.currentTimeMillis获取的是毫秒

long start = System.nanoTime();

long end = System.nanoTime();

//TimeUnit.NANOSECONDS.toMillis纳秒变化为秒
System.out.println("执行时间为"+TimeUnit.NANOSECONDS.toMillis(end-start)+"s");

最后

以上就是任性嚓茶为你收集整理的java8 时间类API的全部内容,希望文章能够帮你解决java8 时间类API所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(46)

评论列表共有 0 条评论

立即
投稿
返回
顶部