java Instant
Instant和timestamp
Instant的概念和timestamp类似。但是在表示上有一点差异。
Instant内置两个变量,一个是seconds,一个是nanos.前者是秒,后者是纳秒。
1秒 = 1000毫秒 = 1000_000_000纳秒
timestamp位于java.sql下,继承自java.util.Date.相比下有以下参数
* @param year the year minus 1900
* @param month 0 to 11
* @param date 1 to 31
* @param hour 0 to 23
* @param minute 0 to 59
* @param second 0 to 59
* @param nano 0 to 999,999,999
两者的转换也比较简单:
Instant转timestamp:
Instant start = Instant.now();
Timestamp timestamp = Timestamp.from(start);
timestamp转Instant:
timestamp.toInstant();
我们再来看下更深层的源码:
首先是toInstant
public Instant toInstant() {return Instant.ofEpochSecond(super.getTime() / MILLIS_PER_SECOND, nanos);}
可以看到这里使用的是Instant ofEpochSecond(long epochSecond, long nanoAdjustment)这个构造函数,前者表示秒,后者则是纳秒。这里super.getTime()返回的是毫秒,所以要除 毫秒/秒 得到秒单位。
然后是from,同样的也是做一个秒和毫秒的转换,再调用相应的构造方法。
public static Timestamp from(Instant instant) {try {Timestamp stamp = new Timestamp(instant.getEpochSecond() * MILLIS_PER_SECOND);stamp.nanos = instant.getNano();return stamp;} catch (ArithmeticException ex) {throw new IllegalArgumentException(ex);}}
Instant
常用Instant构造方法
- Instant调用now()获取当前的时间
- Instant ofEpochSecond(long epochSecond, long nanoAdjustment)传入秒和纳秒;Instant ofEpochSecond(long epochSecond)传入秒,实际上调用带值为0的纳秒构造函数
- Instant ofEpochMilli(long epochMilli)传入毫秒
- Instant from(TemporalAccessor temporal);
Instant parse(final CharSequence text);
在阅读parse的源码时,对lambda表达式不了解的话会感觉这个很难懂:
public static Instant parse(final CharSequence text) {return DateTimeFormatter.ISO_INSTANT.parse(text, Instant::from);}
首先Instant::from
代表的是方法引用,如果替换成lambda则为x -> Instant.from(x)
x代表的是参数,由于是单个参数所以可以省略()
,那么原本就是(x)->Instant.from(x)
再来就是它可以自行推断参数类型,这里parse传入的两个参数为(CharSequence text, TemporalQuery query):
public <T> T parse(CharSequence text, TemporalQuery<T> query)
对应的x 为TemporalQuery query
类型T是泛型,在这里这个函数最终return的会是Instant,那么T为Instant类型
即为TemporalQuery query
再看TemporalQuery源码,发现它是一个函数式接口
@FunctionalInterface
public interface TemporalQuery<R> {R queryFrom(TemporalAccessor temporal);
}
故最终如果不用lambda表达式转为内部类,该句为:
return DateTimeFormatter.ISO_INSTANT.parse(text, Instant::from);
----------------------------------------------------------------
return DateTimeFormatter.ISO_INSTANT.parse(text, (temporal)-> Instant.from(temporal));
----------------------------------------------------------------
return DateTimeFormatter.ISO_INSTANT.parse(text, new TemporalQuery<Instant>() {@Overridepublic Instant queryFrom(TemporalAccessor temporal) {return Instant.from(temporal);}});
这里我想了很久这个temporal到底是怎么传进去的?没想明白!
但是我觉得这个可能和ActionListener listener
一样.
public interface ActionListener extends EventListener {public void actionPerformed(ActionEvent e);}
作为ActionListener也没有接收到一个ActionEvent类型的值,但是还是继续响应相应的事件。
即ActionEvent接收了包含事件发生的相应信息。
那么在这里TemporalAccessor应该同样的接收了TemporalQuery相关的信息。
这个只是我的猜测,如果有大佬看到麻烦解释一下谢谢~
常用方法
方法主要包含三个方面:秒,毫秒,纳秒。这里大多数方法名都比较容易理解就不赘述。
表示方法
Instant instant = Instant.now();instant.getEpochSecond();instant.getNano();instant.toString();instant.toEpochMilli();
操作方法
instant.plusMillis(0);instant.plusSeconds(0);instant.plusNanos(0);instant.minusMillis(0);
省略两个常用的minus方法。
判断方法
Instant otherInstant = Instant.now();instant.isAfter(otherInstant);instant.isBefore(otherInstant);
java Instant相关推荐
- Iso时间转java instant,在java.util.Date和java.time.Instant之间转换古代日期时的差异
我有遗留代码,使用 java.util.Date创建一个古老的日期(12月30日0002).我正在尝试更新我可以使用的代码,但这需要在Date和LocalDate等之间进行转换.我无法完全摆脱使用Da ...
- Java Instant类
时间点 此类的对象表示时间线上的一点.可以理解为人类的绝对时间. 因为是时间线的一点,所以时间点可以比较大小,那么这个时间点的标准都是统一的(UTC时间):即这个时间点对于整个地球人们来说是唯一的,不 ...
- java instant获取微秒转成日期格式_Java8新特性时间日期库DateTime API及示例
点击上方蓝字关注「程序新视界」 Java8新特性的功能已经更新了不少篇幅了,今天重点讲解时间日期库中DateTime相关处理.同样的,如果你现在依旧在项目中使用传统Date.Calendar和Simp ...
- instant java,Instant
方法详细信息 now public static Instant now() 从系统时钟获取当前瞬间. 使用此方法将阻止使用备用时间源进行测试的能力,因为时钟被有效地硬编码. 结果 当前即时使用系统时 ...
- Iso时间转java instant,Java /将ISO-8601(2010-12-16T13:33:50.513852Z)转换为
Instant.parse( "2010-12-16T13:33:50.513852Z" ) java.time 较新的java.time类可以处理此字符串输入. 该Z对端是短期的 ...
- Java Date Time 教程
原文链接 作者:Jakob Jenkov 译者:魏嘉鹏 目录 Java 8 Date Time API Java 7 Date Time API 当你初次尝试弄明白怎么去使用Java的date ti ...
- Java流及流操作示例
转自公众号:后端技术精选 流 此处的流(Stream)与io中的输入流(InputStream)与输出流(OutputStream)是不同的概念,与实时处理数据的流也是不同的概念,但它们也有相似之处. ...
- Java常用类(2)--日期时间相关类Date、Calendar、LocalDateTime、Instant全面
文章目录 java.lang.System类 java.util.Date类 java.sql.Date类 java.text.SimpleDateFormat类 java.util.Calendar ...
- java clock计时_Java Clock类| 实例的Instant()方法
java clock计时 Clock Class Instant()方法 (Clock Class instant() method) instant() method is available in ...
最新文章
- linux dma拷贝数据到用户态,图解:零拷贝Zero-Copy技术大揭秘
- json数据在前端(javascript)和后端(php)转换
- ASP.NET 2.0 正式版中无刷新页面的开发
- Net设计模式实例之享元模式( Flyweight Pattern)
- mac 更换默认蓝牙适配器_Win7连接低功耗蓝牙(BLE)鼠标
- golang 程序部署及Supervisord deamon 运行
- MSSQL字符串处理-清除指定不连续或连续的字符
- CCP(Cost complexity pruning) on sklearn with python implemention
- (PPT)Python程序设计课程教学内容组织与教学方法实践
- python自定义包的发布与安装
- win10下安装Vm15添加虚拟机的总结
- Android上拉查看详情实现
- 【深度强化学习】交叉熵方法
- 软件测试中的Fault、Error和Failure
- 【springcloud问题】Could not locate PropertySource and the fail fast property is set, failing
- VSCode 配置 python环境 相对齐全 有遇到问题欢迎投稿哈
- 集成创新,拓展兼容--红旗Linux桌面版5.0隆重发布(转)
- CCNA(十五)思科ACL、NAT配置命令
- 网优5g前景_5G网络优化师前景怎么样?
- 脑动力PHP函数速查效率手册pdf
热门文章
- 海南计算机的初中学校有哪些,海南海口十大初中排行榜
- Java自学资料!靠着这份面试题跟答案
- 数学建模英文论文的写作方法和步骤
- 成人赛道IT职业教育将迎来“黄金发展期”
- 2.淘宝购买行为分析项目——Hive查询、Sqoop的介绍与使用、SQLyog的安装与使用、Superset的概述与安装使用
- 流氓软件卸载-MrWReSadse、Nexuser.exe、WRSvcmbdl.dll
- 果园机器人反思稿_果园机器人读后感500字
- 基于Python的SQLite基础知识学习
- ubuntu的使用经验to新手
- 单极霍尔开关SS1368 无刷直流电机用