热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

这么详细的Java8日期时间API,还不赶紧收藏起来(三):Instant

Instant在时间线上的瞬间点,即一个时间的时间戳Instant声明publicfinalclassInstantimplementsTemporal,Tem

Instant

在时间线上的瞬间点,即一个时间的时间戳

Instant声明

public final class Instantimplements Temporal, TemporalAdjuster, Comparable<Instant>, Serializable {

这个类是不可变的和线程安全的。

Instant只有两个字段&#xff0c;一个是seconds&#xff0c;表示1970-01-01T00:00:00Z到现在的秒数&#xff0c;nanos表示秒数后的纳秒数。

/*** The number of seconds from the epoch of 1970-01-01T00:00:00Z.*/private final long seconds;/*** The number of nanoseconds, later along the time-line, from the seconds field.* This is always positive, and never exceeds 999,999,999.*/private final int nanos;

从描述&#xff0c;我们可以得知Instant当前表示的描述与

System.currentTimeMillis()是一样的&#xff0c;看我的测试Instant now2 &#61; Instant.now();System.out.println(now2.getEpochSecond());System.out.println(System.currentTimeMillis());

输出&#xff1a;

1592294701
1592294701325

可以看出两者的秒数是相当的&#xff0c;只是currentTimeMillis输出的是毫秒级别


API

静态方法

public static Instant now()&#xff1a;从系统时钟获取当前瞬间。

public static Instant ofEpochSecond(long epochSecond)&#xff1a;使用从1970-01-01T00&#xff1a;00&#xff1a;00Z的时代开始的秒数获得一个Instant的实例&#xff0c;纳秒设置为零。

public static Instant ofEpochMilli(long epochMilli)&#xff1a;获得的一个实例Instant从1970-01-01T00划时代使用毫秒&#xff1a;00&#xff1a;00Z。从指定的毫秒中提取秒和纳秒。

public static Instant parse(CharSequence text)&#xff1a;从一个文本字符串&#xff08;如2020-06-16T16:15:30.00Z&#xff09;获取一个Instant的实例。
例&#xff1a;

Instant parse &#61; Instant.parse("2020-06-16T16:15:30.00Z");

注意&#xff1a;秒之后的数值要用Z来表示&#xff0c;即0为0Z&#xff0c;16为16Z

非静态方法

public ValueRange range(TemporalField field)&#xff1a;获取指定字段的有效值的范围。一般使用的是ChronoField中的字段

public int get(TemporalField field)&#xff1a;获取指定字段的值&#xff0c;返回类型为int 。如果字段不支持&#xff0c;会抛出UnsupportedTemporalTypeException异常。Instant 还有一个getLong方法&#xff0c;用法一样&#xff0c;只是返回值为Long类型

例&#xff1a;

Instant parse &#61; Instant.parse("2020-06-16T16:15:30.666Z");//返回纳秒值System.out.println(parse.get(ChronoField.NANO_OF_SECOND));

public long getEpochSecond()&#xff1a;获取从1970-01-01T00&#xff1a;00&#xff1a;00Z开始到现在的秒数

public int getNano()&#xff1a;获取当前时间戳的纳秒值&#xff0c;为9位数

例&#xff1a;

&#64;Testpublic void test(){Instant now &#61; Instant.now();// 秒System.out.println(now.getEpochSecond());//纳秒System.out.println(now.getNano());}输出1592314246
874488500

public Instant with(TemporalField field,long newValue)&#xff1a;将指定的字段设置为新值返回此瞬点的副本。

常用字段的有ChronoField类下的这4个

NANO_OF_SECOND &#xff1a;指定纳秒

MICRO_OF_SECOND &#xff1a;指定微妙

MILLI_OF_SECOND &#xff1a;指定毫秒

INSTANT_SECONDS &#xff1a;返回一个指定秒的Instant

例&#xff1a;

Instant parse &#61; Instant.parse("2020-06-16T16:15:30.666Z");Instant with &#61; parse.with(ChronoField.INSTANT_SECONDS, 50);System.out.println(parse.with(ChronoField.NANO_OF_SECOND, 10));System.out.println(with);

输出
2020-06-16T16:15:30.000000010Z
1970-01-01T00:00:50.666Z

public Instant plus(long amountToAdd,TemporalUnit unit)&#xff1a;返回添加指定数量的此瞬间的副本。

常用字段类ChronoUnit&#xff0c;那么在这里实现添加。 支持的字段的行为如下&#xff1a;

NANOS - 返回一个Instant &#xff0c;其中添加了Instant的纳秒数。 这相当于plusNanos(long) 。
MICROS - 返回一个Instant了指定微秒数的Instant。 这相当于plusNanos(long) &#xff0c;数量乘以1,000。
MILLIS -返回Instant添加了指定的毫秒数。 相当于plusNanos(long) &#xff0c;数量乘以1,000,000。
SECONDS - 返回一个Instant &#xff0c;加上指定的秒数。 这相当于plusSeconds(long) 。
MINUTES - 返回具有Instant分钟数的Instant。 这相当于plusSeconds(long) &#xff0c;数量乘以60。
HOURS -返回Instant与加入小时指定数目。 相当于plusSeconds(long) &#xff0c;数量乘以3,600。
HALF_DAYS - 返回一个Instant &#xff0c;加上指定的半天。 相当于plusSeconds(long) &#xff0c;数量乘以43.00&#xff08;12小时&#xff09;。
DAYS -返回Instant添加了天的指定数目。 相当于plusSeconds(long) &#xff0c;数量乘以86,400&#xff08;24小时&#xff09;。

例&#xff1a;

Instant instant &#61; Instant.parse("2020-06-16T16:15:30.666Z");
Instant result &#61; instant.plus(10, ChronoUnit.MINUTES);

public Instant plusSeconds(long secondsToAdd)&#xff1a;添加指定秒数

public Instant plusMillis(long millisToAdd)&#xff1a;添加指定毫秒数

public Instant plusNanos(long nanosToAdd)&#xff1a;添加指定纳秒数

public Instant minus(long amountToSubtract,TemporalUnit unit)&#xff1a;为Instant 的减去方法&#xff0c;还有minusSeconds等&#xff0c;都是减去相应单位数值

public ZonedDateTime atZone(ZoneId zone)&#xff1a;将此瞬间与时区相结合&#xff0c;创建一个ZonedDateTime 。

例&#xff1a;

//用默认时区和当前时间点创建一个ZonedDateTime
System.out.println(Instant.now().atZone(ZoneId.systemDefault()));输出&#xff1a;
2020-06-16T21:53:12.520455100&#43;08:00[Asia/Shanghai]

public long toEpochMilli()&#xff1a;将此瞬间转换为1970-01-01T00&#xff1a;00&#xff1a;00Z到该瞬间的毫秒数。如果是当前时间点&#xff0c;则与System.currentTimeMillis()是一样的

例&#xff1a;

System.out.println(System.currentTimeMillis());
System.out.println(Instant.now().toEpochMilli());输出
1592315728420
1592315728422

public int compareTo(Instant otherInstant)&#xff1a;将此瞬间与指定的时刻进行比较。先比较秒数&#xff0c;秒数不相等&#xff0c;则返回相差秒数&#xff0c;秒数相等&#xff0c;则比较纳秒数

源码如下&#xff1a;

public int compareTo(Instant otherInstant) {int cmp &#61; Long.compare(seconds, otherInstant.seconds);if (cmp !&#61; 0) {return cmp;}return nanos - otherInstant.nanos;
}

public boolean isAfter(Instant otherInstant)&#xff1a;检查这个瞬间是否在指定的时间点之后。使用的是compareTo方法&#xff0c;大于0则表示在之后&#xff0c;返回true

源码&#xff1a;

public boolean isAfter(Instant otherInstant) {return compareTo(otherInstant) > 0;}

public boolean isBefore(Instant otherInstant):检查这个时刻是否在指定的时刻之前。相信大家应该知道源码使用的是什么方法了

public boolean equals(Object otherInstant)&#xff1a;检查这个瞬间是否等于指定的时刻。看一下源码方法&#xff0c;实现是不是十分简洁明了&#xff0c;值的学习

源码&#xff1a;

public boolean equals(Object otherInstant) {if (this &#61;&#61; otherInstant) {return true;}if (otherInstant instanceof Instant) {Instant other &#61; (Instant) otherInstant;return this.seconds &#61;&#61; other.seconds &&this.nanos &#61;&#61; other.nanos;}return false;}


推荐阅读
  • 本指南从零开始介绍Scala编程语言的基础知识,重点讲解了Scala解释器REPL(读取-求值-打印-循环)的使用方法。REPL是Scala开发中的重要工具,能够帮助初学者快速理解和实践Scala的基本语法和特性。通过详细的示例和练习,读者将能够熟练掌握Scala的基础概念和编程技巧。 ... [详细]
  • Python 伦理黑客技术:深入探讨后门攻击(第三部分)
    在《Python 伦理黑客技术:深入探讨后门攻击(第三部分)》中,作者详细分析了后门攻击中的Socket问题。由于TCP协议基于流,难以确定消息批次的结束点,这给后门攻击的实现带来了挑战。为了解决这一问题,文章提出了一系列有效的技术方案,包括使用特定的分隔符和长度前缀,以确保数据包的准确传输和解析。这些方法不仅提高了攻击的隐蔽性和可靠性,还为安全研究人员提供了宝贵的参考。 ... [详细]
  • 大类|电阻器_使用Requests、Etree、BeautifulSoup、Pandas和Path库进行数据抓取与处理 | 将指定区域内容保存为HTML和Excel格式
    大类|电阻器_使用Requests、Etree、BeautifulSoup、Pandas和Path库进行数据抓取与处理 | 将指定区域内容保存为HTML和Excel格式 ... [详细]
  • 属性类 `Properties` 是 `Hashtable` 类的子类,用于存储键值对形式的数据。该类在 Java 中广泛应用于配置文件的读取与写入,支持字符串类型的键和值。通过 `Properties` 类,开发者可以方便地进行配置信息的管理,确保应用程序的灵活性和可维护性。此外,`Properties` 类还提供了加载和保存属性文件的方法,使其在实际开发中具有较高的实用价值。 ... [详细]
  • 深入解析 Synchronized 锁的升级机制及其在并发编程中的应用
    深入解析 Synchronized 锁的升级机制及其在并发编程中的应用 ... [详细]
  • 在对WordPress Duplicator插件0.4.4版本的安全评估中,发现其存在跨站脚本(XSS)攻击漏洞。此漏洞可能被利用进行恶意操作,建议用户及时更新至最新版本以确保系统安全。测试方法仅限于安全研究和教学目的,使用时需自行承担风险。漏洞编号:HTB23162。 ... [详细]
  • 深入解析Android 4.4中的Fence机制及其应用
    在Android 4.4中,Fence机制是处理缓冲区交换和同步问题的关键技术。该机制广泛应用于生产者-消费者模式中,确保了不同组件之间高效、安全的数据传输。通过深入解析Fence机制的工作原理和应用场景,本文探讨了其在系统性能优化和资源管理中的重要作用。 ... [详细]
  • 本指南介绍了如何在ASP.NET Web应用程序中利用C#和JavaScript实现基于指纹识别的登录系统。通过集成指纹识别技术,用户无需输入传统的登录ID即可完成身份验证,从而提升用户体验和安全性。我们将详细探讨如何配置和部署这一功能,确保系统的稳定性和可靠性。 ... [详细]
  • 本文深入解析了WCF Binding模型中的绑定元素,详细介绍了信道、信道管理器、信道监听器和信道工厂的概念与作用。从对象创建的角度来看,信道管理器负责信道的生成。具体而言,客户端的信道通过信道工厂进行实例化,而服务端则通过信道监听器来接收请求。文章还探讨了这些组件之间的交互机制及其在WCF通信中的重要性。 ... [详细]
  • 本文将继续探讨 JavaScript 函数式编程的高级技巧及其实际应用。通过一个具体的寻路算法示例,我们将深入分析如何利用函数式编程的思想解决复杂问题。示例中,节点之间的连线代表路径,连线上的数字表示两点间的距离。我们将详细讲解如何通过递归和高阶函数等技术实现高效的寻路算法。 ... [详细]
  • 本文详细介绍了一种利用 ESP8266 01S 模块构建 Web 服务器的成功实践方案。通过具体的代码示例和详细的步骤说明,帮助读者快速掌握该模块的使用方法。在疫情期间,作者重新审视并研究了这一未被充分利用的模块,最终成功实现了 Web 服务器的功能。本文不仅提供了完整的代码实现,还涵盖了调试过程中遇到的常见问题及其解决方法,为初学者提供了宝贵的参考。 ... [详细]
  • 【问题描述】给定一个单向链表,要求使用Java编程语言实现从链表尾部到头部的逆序打印功能。该功能通过利用栈的数据结构来实现,最终将结果存储在一个ArrayList中返回。具体实现步骤如下:1. 遍历链表,将每个节点的值依次压入栈中。2. 从栈中逐个弹出元素,并将其添加到ArrayList中。3. 返回包含逆序链表元素的ArrayList。这种方法充分利用了栈的后进先出特性,确保链表元素能够按照从尾到头的顺序被正确处理。 ... [详细]
  • 技术分享:使用 Flask、AngularJS 和 Jinja2 构建高效前后端交互系统
    技术分享:使用 Flask、AngularJS 和 Jinja2 构建高效前后端交互系统 ... [详细]
  • 如何将TS文件转换为M3U8直播流:HLS与M3U8格式详解
    在视频传输领域,MP4虽然常见,但在直播场景中直接使用MP4格式存在诸多问题。例如,MP4文件的头部信息(如ftyp、moov)较大,导致初始加载时间较长,影响用户体验。相比之下,HLS(HTTP Live Streaming)协议及其M3U8格式更具优势。HLS通过将视频切分成多个小片段,并生成一个M3U8播放列表文件,实现低延迟和高稳定性。本文详细介绍了如何将TS文件转换为M3U8直播流,包括技术原理和具体操作步骤,帮助读者更好地理解和应用这一技术。 ... [详细]
  • 优化后的标题:深入探讨网关安全:将微服务升级为OAuth2资源服务器的最佳实践
    本文深入探讨了如何将微服务升级为OAuth2资源服务器,以订单服务为例,详细介绍了在POM文件中添加 `spring-cloud-starter-oauth2` 依赖,并配置Spring Security以实现对微服务的保护。通过这一过程,不仅增强了系统的安全性,还提高了资源访问的可控性和灵活性。文章还讨论了最佳实践,包括如何配置OAuth2客户端和资源服务器,以及如何处理常见的安全问题和错误。 ... [详细]
author-avatar
宗小胖
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有