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构造方法

  1. Instant调用now()获取当前的时间
  2. Instant ofEpochSecond(long epochSecond, long nanoAdjustment)传入秒和纳秒;Instant ofEpochSecond(long epochSecond)传入秒,实际上调用带值为0的纳秒构造函数
  3. Instant ofEpochMilli(long epochMilli)传入毫秒
  4. 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相关推荐

  1. Iso时间转java instant,在java.util.Date和java.time.Instant之间转换古代日期时的差异

    我有遗留代码,使用 java.util.Date创建一个古老的日期(12月30日0002).我正在尝试更新我可以使用的代码,但这需要在Date和LocalDate等之间进行转换.我无法完全摆脱使用Da ...

  2. Java Instant类

    时间点 此类的对象表示时间线上的一点.可以理解为人类的绝对时间. 因为是时间线的一点,所以时间点可以比较大小,那么这个时间点的标准都是统一的(UTC时间):即这个时间点对于整个地球人们来说是唯一的,不 ...

  3. java instant获取微秒转成日期格式_Java8新特性时间日期库DateTime API及示例

    点击上方蓝字关注「程序新视界」 Java8新特性的功能已经更新了不少篇幅了,今天重点讲解时间日期库中DateTime相关处理.同样的,如果你现在依旧在项目中使用传统Date.Calendar和Simp ...

  4. instant java,Instant

    方法详细信息 now public static Instant now() 从系统时钟获取当前瞬间. 使用此方法将阻止使用备用时间源进行测试的能力,因为时钟被有效地硬编码. 结果 当前即时使用系统时 ...

  5. 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对端是短期的 ...

  6. Java Date Time 教程

    原文链接 作者:Jakob Jenkov  译者:魏嘉鹏 目录 Java 8 Date Time API Java 7 Date Time API 当你初次尝试弄明白怎么去使用Java的date ti ...

  7. Java流及流操作示例

    转自公众号:后端技术精选 流 此处的流(Stream)与io中的输入流(InputStream)与输出流(OutputStream)是不同的概念,与实时处理数据的流也是不同的概念,但它们也有相似之处. ...

  8. Java常用类(2)--日期时间相关类Date、Calendar、LocalDateTime、Instant全面

    文章目录 java.lang.System类 java.util.Date类 java.sql.Date类 java.text.SimpleDateFormat类 java.util.Calendar ...

  9. java clock计时_Java Clock类| 实例的Instant()方法

    java clock计时 Clock Class Instant()方法 (Clock Class instant() method) instant() method is available in ...

最新文章

  1. linux dma拷贝数据到用户态,图解:零拷贝Zero-Copy技术大揭秘
  2. json数据在前端(javascript)和后端(php)转换
  3. ASP.NET 2.0 正式版中无刷新页面的开发
  4. Net设计模式实例之享元模式( Flyweight Pattern)
  5. mac 更换默认蓝牙适配器_Win7连接低功耗蓝牙(BLE)鼠标
  6. golang 程序部署及Supervisord deamon 运行
  7. MSSQL字符串处理-清除指定不连续或连续的字符
  8. CCP(Cost complexity pruning) on sklearn with python implemention
  9. (PPT)Python程序设计课程教学内容组织与教学方法实践
  10. python自定义包的发布与安装
  11. win10下安装Vm15添加虚拟机的总结
  12. Android上拉查看详情实现
  13. 【深度强化学习】交叉熵方法
  14. 软件测试中的Fault、Error和Failure
  15. 【springcloud问题】Could not locate PropertySource and the fail fast property is set, failing
  16. VSCode 配置 python环境 相对齐全 有遇到问题欢迎投稿哈
  17. 集成创新,拓展兼容--红旗Linux桌面版5.0隆重发布(转)
  18. CCNA(十五)思科ACL、NAT配置命令
  19. 网优5g前景_5G网络优化师前景怎么样?
  20. 脑动力PHP函数速查效率手册pdf

热门文章

  1. 海南计算机的初中学校有哪些,海南海口十大初中排行榜
  2. Java自学资料!靠着这份面试题跟答案
  3. 数学建模英文论文的写作方法和步骤
  4. 成人赛道IT职业教育将迎来“黄金发展期”
  5. 2.淘宝购买行为分析项目——Hive查询、Sqoop的介绍与使用、SQLyog的安装与使用、Superset的概述与安装使用
  6. 流氓软件卸载-MrWReSadse、Nexuser.exe、WRSvcmbdl.dll
  7. 果园机器人反思稿_果园机器人读后感500字
  8. 基于Python的SQLite基础知识学习
  9. ubuntu的使用经验to新手
  10. 单极霍尔开关SS1368 无刷直流电机用