返回顶部
首页 > 资讯 > 精选 >如何理解Java 8中时间API
  • 632
分享到

如何理解Java 8中时间API

2023-06-17 08:06:49 632人浏览 八月长安
摘要

本篇文章为大家展示了如何理解Java 8中时间api,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。留意到其中Java 8预览版中将会出现新的关于日期和时间的API(遵守jsR 310规范)。对这些新

本篇文章为大家展示了如何理解Java 8中时间api,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

留意到其中Java 8预览版中将会出现新的关于日期和时间的API(遵守jsR 310规范)。对这些新的API进行举例说明。首先先介绍以下几个:Instant,LocalDate,LocalTime和LocalDateTime。

Instant (java.time.Instant)

可能最容易开始学习java.time包中的内容的就是先来看看Instant这个类。所谓的Instant类代表的是某个时间(有点象java.util.Date),它是精确到纳秒的(而不是象旧版本的Date精确到毫秒)。如果使用纳秒去表示一个时间则原来的使用一位Long类型是不足够的,需要占用更多一点的存储空间,然而实际上其内部是由两个Long字段组成,***个部分保存的是自标准Java计算时代(就是1970年1月1日开始)到现在的秒数,第二部分保存的是纳秒数(永远不会超过999,999,999)。我们看下一个具体的例子:

  1.  //获得当前时间 

  2.  

  3. //获得当前时间 

  4. Instant instant = Instant.now();

  5. // 以ISO-8601输出 

  6. System.out.println(instant);

在Open jdk 中运行上面的代码,可以有如下格式的输出:2013-06-25T16:22:52.966Z,可以看到,输入了更为精确的日期。下面的例子是更多的关于Instant类的用法,如

//将java.util.Date转换为Instant Instant instant = Instant.ofEpochMilli(new Date().getTime()); //从字符串类型中创建Instant类型的时间 instant = Instant.parse("1995-10-23T10:12:35Z");

注意,在上面的例子中,有一个字符串中创建Instant类型的时间,但Instant代表的是一个时间,并不包括时区的概念,所以必须传入的是符合UTC格式的字符串)。Instant API也提供了一些很有用的方法允许使用Instant和其他包中的类进行一些运算,下面是例子:

instant.plus(Duration.ofHours(5).plusMinutes(4));

上面表达的含义为,将现在的时间加上5个小时4分钟。

那么这个例子中,使用了多少个java.time.Instant实例呢?答案是两个。Java.time这个包是线程安全的并且和其他大部分类一样是不可变类。Instant也遵守这个规则,因此plus方法产生一个新的实例,如:

Instant instant1 = instant.plus(Duration.ofHours(5).plusMinutes(4)); System.out.println("Instant is immutable, so instant==instant returns: " + (instant == instant1));

输出为:

Instant is immutable, so instant==instant returns: false

下面是更多关于计算的例子:

// Substract 5 days of an instant 计算5天前 instant.minus(5, ChronoUnit.DAYS); // Option 1 方法1 instant.minus(Duration.ofDays(5)); // Option 2  方法2  //计算两个Instant之间的分钟数 long diffAsMinutes = instant.periodUntil(instant1, ChronoUnit.MINUTES); // 方法1 long diffAsMinutes = ChronoUnit.MINUTES.between(instant, instant1); // 方法2

Instant是可比较的,这意味着可以对两个Instant进行比较。它提供了isAfter()和isBefore()两个方法进行比较,如下代码所示:

//用compareTo方法比较 System.out.fORMat("instant1.compareTo(instant)=%d.%n", instant1.compareTo(instant));  // 使用isAfter()和isBefore() System.out.format("instant1.isAfter(instant)=%b, instant1.isBefore(instant)=%b.%n",   instant1.isAfter(instant), instant1.isBefore(instant))

输出结果:

instant1.compareTo(instant)=1. instant1.isAfter(instant)=true, instant1.isBefore(instant)=false

Localdate和LocalTime

LocalDate表示不带时区的日期,比如1-1-2000。LocalTime表示不带时区的时间,比如04:44:50.12,和之前提到的Instant类是从1970年计算偏移量不同,这两个类的输出是人们习惯阅读的日期和时间。有很多种方法去获得LocalTime和LocalDate的实例,如

  1. LocalDate localDate = LocalDate.now(); 

  2. localDate = LocalDate.ofYearDay(2005, 86); // 获得2005年的第86天 (27-Mar-2005) 

  3. localDate = LocalDate.of(2013, Month.AUGUST, 10); //2013年8月10日 

  4. LocalTime localTime = LocalTime.of(22, 33); //10:33 PM 

  5. localTime = LocalTime.now(); 

  6. localTime = LocalTime.ofSecondOfDay(4503); // 返回一天中的第4503秒 (1:15:30 AM)

LocalDate和LocalTime和Instant一样遵守同样的线程规定―― 如它们的实例子都是不可变的。LocalDate和LocalTime和Instant有同样的计算和比较方法(其中有些方法是在java.time.temporal.Temporal接口中定义的,并且上面这些类都实现了这些方法):

LocalDate localDate1 = localDate.plus(5, ChronoUnit.HOURS); localDate.isBefore(localDate1);

LocalDateTime

***来看下在简单日期和时间类中最重要的一个:LocalDataTeime。它是LocalDate和LocalTime的组合体,表示的是不带时区的日期及时间。看上去,LocalDateTime和Instant很象,但记得的是“Instant中是不带时区的即时时间点。可能有人说,即时的时间点不就是日期+时间么?看上去是这样的,但还是有所区别,比如LocalDateTime对于用户来说,可能就只是一个简单的日期和时间的概念,考虑如下的例子:两个人都在2013年7月2日11点出生,***个人是在英国出生,而第二个是在加尼福利亚,如果我们问他们是在什么时候出生的话,则他们看上去都是在同样的时间出生(就是LocalDateTime所表达的),但如果我们根据时间线(如格林威治时间线)去仔细考察,则会发现在出生的人会比在英国出生的人稍微晚几个小时(这就是Instant所表达的概念,并且要将其转换为UTC格式的时间)。除此之外,LocalDateTime的用法和上述介绍的其他类都很相似,如下例子所示:

LocalDateTime localDateTime = LocalDateTime.now();  //当前时间加上25小时3分钟  LocalDateTime inTheFuture = localDateTime.plusHours(25).plusMinutes(3);  // 同样也可以用在localTime和localDate中  System.out.println(localDateTime.toLocalTime().plusHours(25).plusMinutes(3));  System.out.println(localDateTime.toLocalDate().plusMonths(2));  //  也可以使用实现TemportalAmount接口的Duration类和Period类  System.out.println(localDateTime.toLocalTime().plus(Duration.ofHours(25).plusMinutes(3))); System.out.println(localDateTime.toLocalDate().plus(Period.ofMonths(2)));

上述内容就是如何理解Java 8中时间API,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注编程网精选频道。

--结束END--

本文标题: 如何理解Java 8中时间API

本文链接: https://lsjlt.com/news/287942.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 如何理解Java 8中时间API
    本篇文章为大家展示了如何理解Java 8中时间API,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。留意到其中Java 8预览版中将会出现新的关于日期和时间的API(遵守JSR 310规范)。对这些新...
    99+
    2023-06-17
  • 如何理解Java 8中的日期和时间API和JSR310
    这期内容当中小编将会给大家带来有关如何理解Java 8中的日期和时间API和JSR310,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。博客一个月没更新了,这次给大家讲下java8时间与日期API。众所周知...
    99+
    2023-06-17
  • 如何使用Java 8的时间类
    这篇文章主要讲解了“如何使用Java 8的时间类”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何使用Java 8的时间类”吧! 为什么会在Jdk8中加入很多时间类非线程安全jav...
    99+
    2023-06-15
  • 如何解决java获取时间相差8小时的问题
    目录三种时间差错问题: 原因: 解决方案: 总结:都是时区问题三种时间差错问题: java下使用new date()获取的时间会和真实的本地时间相差8小时。 本地...
    99+
    2024-04-02
  • java中的时间API有哪些
    这期内容当中小编将会给大家带来有关java中的时间API有哪些,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。Java是什么Java是一门面向对象编程语言,可以编写桌面应用程序、Web应用程序、分布式系统和...
    99+
    2023-06-14
  • java中的时间API是什么
    这篇文章主要介绍“java中的时间API是什么”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“java中的时间API是什么”文章能帮助大家解决问题。1、Clock类可用于访问当前日期和时间。Clock...
    99+
    2023-06-30
  • 如何理解Java Excel API
    如何理解Java Excel API,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。有时在java开发中会操作excel表格,其实操作起来也特别简单。这里把前期操作步骤说一下,本...
    99+
    2023-06-17
  • Java的API时间格式化如何实现
    这篇文章主要讲解了“Java的API时间格式化如何实现”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java的API时间格式化如何实现”吧!新API的时间格式化新的时间API的时间格式化由j...
    99+
    2023-07-06
  • 详解Java关于JDK中时间日期的API
    JDK 8 之前日期和时间的API测试 //1.System类中的currentTimeMillis() public void test1(){ lo...
    99+
    2024-04-02
  • java中有哪些时间日期API
    本篇文章给大家分享的是有关java中有哪些时间日期API,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。Java的特点有哪些Java的特点有哪些1.Java语言作为静态面向对象编...
    99+
    2023-06-14
  • 如何正确的在Java中使用日期与时间API
    这篇文章将为大家详细讲解有关如何正确的在Java中使用日期与时间API,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。一、时间和日期在系统开发中,日期与时间作为重要的业务因素,起到十分关键的作...
    99+
    2023-06-06
  • 如何理解Java 8异步编程CompletableFuture
    本篇内容介绍了“如何理解Java 8异步编程CompletableFuture”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!本文大纲速看一、...
    99+
    2023-06-15
  • 如何理解Java 8到Java 15的发展历程
    本篇内容介绍了“如何理解Java 8到Java 15的发展历程”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!函数式编程(Java 8)在Ja...
    99+
    2023-06-15
  • 如何理解Apache Tomcat 8 中的 NIO2
    这篇文章给大家介绍如何理解Apache Tomcat 8 中的 NIO2,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。Apache Tomcat 8 有一个新的基于 NIO ...
    99+
    2024-04-02
  • Linux 下 PHP API 响应时间不稳定,如何处理?
    在 PHP 开发中,经常会涉及到编写 API 接口,而 API 接口的响应时间直接影响着用户体验。然而,有时候我们会发现在 Linux 环境下,API 接口的响应时间不稳定,这时候我们该如何解决呢? 了解响应时间不稳定的原因 在解决问...
    99+
    2023-11-08
    api 响应 linux
  • 如何实现java 8 Stream处理
    这篇文章将为大家详细讲解有关如何实现java 8 Stream处理,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。package staticTest;import java.util.Arr...
    99+
    2023-06-03
  • 如何延长Windows 8笔记本续航时间
    Windows 8系统的全新特性让更多笔记本产品开始具备触摸屏,可以使用App应用程序获得更好的使用体验,以至于在平时日常生活工作中,我们经常需要使用到笔记本,这也意味着笔记本的续航时间可能要比以往的产品更...
    99+
    2022-06-04
    笔记本 时间 Windows
  • Java中如何获取系统时间
    Java中获取系统时间的方法:1、通过Date类来获取当前时间;2、通过System类中的currentTimeMillis方法来获取当前时间;3、通过Calendar类来获取当前时间;具体操作示例:通过Date类来获取当前时间。Date ...
    99+
    2024-04-02
  • Java 8中CompletableFuture如何使用
    Java 8中CompletableFuture如何使用,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。1、创建一个完成的CompletableFuture最简单的例子就是使用一...
    99+
    2023-06-15
  • javascript中时间如何转时间戳
    这篇文章主要介绍javascript中时间如何转时间戳,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!转换方法:1、使用“Date.parse(new Date())”语句;2、使用“(new Date()).valu...
    99+
    2023-06-15
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作