设为首页 加入收藏

TOP

Java 8新特性之新的日期和时间API(二)
2018-11-20 22:09:43 】 浏览:392
Tags:Java 特性 日期 时间 API
所经历的描述进行计算。


可以使用静态工厂方法ofEpochSecond传递一个代笔哦啊秒数的值创建一个该类的实例。这个方法还有一个重载版本,它接受第二个以纳秒为单位的参数值,对传入作为秒数的参数进行调整。重载的版本会调整纳秒参数,确保保存的纳秒分片在0到999999999之间,这意味着下面这些对ofEpochSecond工厂方法的调用返回几乎同样的Instant对象:


        Instant instant = Instant.ofEpochSecond(3);
        Instant instant2 = Instant.ofEpochSecond(3, 0);
        Instant instant3 = Instant.ofEpochSecond(2, 1_000_000_000);
        Instant instant4 = Instant.ofEpochSecond(4, -1_000_000_000);


1970-01-01T00:00:03Z


Instant类也支持静态工厂方法now,它能够帮你获取当前时刻的时间戳。Instant的设计初衷是为了便于机器使用,它所包含的是由秒及纳秒所构成的数字。所以,它无法处理那些我们非常容易理解的时间单位。


 


定义Duration或Period


计算日期时间差使用这两个类


        Duration d1 = Duration.between(time1, time2);
        Duration d2 = Duration.between(datetime1, datetime2);
        Duration d3 = Duration.between(instant,instant2);


由于LocalDateTime和Instant是为不同的目的而设计的,一个是为了人阅读的,一个是为了机器处理的,所以不能将二者混用。此外,由于Duration类主要用于以秒和纳秒衡量时间的长短,所以不能向between方法传递LocalDate。


Duration和Period类都提供了很多非常方便的工厂类,直接创建对应的实例。


        Duration threeMinutes = Duration.ofMinutes(3);
        Duration threeMinutes = Duration.of(3, ChronoUnit.MINUTES);


        Period tenDays = Period.ofDays(10);
        Period threeWeeks  = Period.ofWeeks(3);
        Period twoYearsSixMothsOneDay = Period.of(2,6,1);


Period计算时间差


        LocalDate today = LocalDate.now();
        System.out.println("Today : " + today);
        LocalDate birthDate = LocalDate.of(1991, 1, 11);
        System.out.println("BirthDate : " + birthDate);


        Period p = Period.between(birthDate, today);
        System.out.printf("年龄 : %d 年 %d 月 %d 日", p.getYears(), p.getMonths(), p.getDays());


Today : 2018-08-22
BirthDate : 1991-01-11
年龄 : 27 年 7 月 11 日


Duration计算相差秒数


        Instant inst1 = Instant.now();
        System.out.println("Inst1 : " + inst1);
        Instant inst2 = inst1.plus(Duration.ofSeconds(10));
        System.out.println("Inst2 : " + inst2);


        System.out.println("Difference in milliseconds : " + Duration.between(inst1, inst2).toMillis());


        System.out.println("Difference in seconds : " + Duration.between(inst1, inst2).getSeconds());


Difference in milliseconds : 10000
Difference in seconds : 10


到目前为止,这些日期和时间都是不可修改的,这是为了更好的支持函数式编程,确保线程安全。如果你想在LocalDate实例上增加3天,或者将日期解析和输入 dd/MM/yyyy这种格式。 将在下一节讲解。


操作、解析和格式化日期


对已存在的LocalDate对象,创建它的修改版,最简单的方式是使用withAttribute方法。withAttribute方法会创建对象的一个副本,并按照需要修改它的属性。以下所有的方法都返回了一个修改属性的对象,他们不会影响原来的对象。


        LocalDate  dd = LocalDate.of(2018,8,23); //2018-08-23
        LocalDate dd1 = dd.withYear(2017); //2017-08-23
        LocalDate dd2 = dd.withDayOfMonth(22); //2018-08-22
        LocalDate dd4 = dd.withMonth(10); //2018-10-23
        LocalDate dd3 = dd.with(ChronoField.MONTH_OF_YEAR,9); //2018-

首页 上一页 1 2 3 4 5 下一页 尾页 2/5/5
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Java 8新特性之CompletableFuture.. 下一篇Java 8新特性之Optional取代null

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目