时间:2021-05-20
Java 8 Instant 时间戳
用于“时间戳”的运算。它是以Unix元年(传统 的设定为UTC时区1970年1月1日午夜时分)开始 所经历的描述进行运算
注意:这里额控制台输出:now = 2020-12-29T06:32:49.480Z。
Intance的now方法:
public static Instant now() { return Clock.systemUTC().instant(); }这是输出的世界标准时间,其中T表示时分秒的开始(或者日期与时间的间隔),Z表示这是一个世界标准时间。
Instant 是时间戳,是指世界标准时格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起至现在的总秒数,Instant本身实际上是指明时区了,是0时区(也就是比北京时间少8小时)。
2.1 通过方法Instant.now().atZone(ZoneId.systemDefault())获取当前地区的时间
ZonedDateTime zonedDateTime = Instant.now().atZone(ZoneId.systemDefault()); System.out.println(zonedDateTime);输出结果
2020-12-31T17:31:14.953+08:00[Asia/Shanghai]
2.2 通过增加8小时,转化为北京时间
方法名称 描述 plusMillis() 增加时间戳时间,以毫秒为单位 minusNanos() 增加时间戳时间,以纳秒为单位 minusSeconds() 增加时间戳时间,以秒为单位 TimeUnit.HOURS.toMillis() 将小时转化为毫秒数
//增加8个小时,使Instant.now()返回时间为北京时间 Instant now2 = Instant.now().plusMillis(TimeUnit.HOURS.toMillis(8)); System.out.println("now2 = " + now2);输出结果:now2 = 2020-12-29T14:35:32.631Z
转换为符合当前的北京时间。
通过 getEpochSecond()方法获取距离格林威治时间的秒数
通过toEpochMilli()方法获取距离格林威治时间的毫秒数
//增加8个小时,使Instant.now()返回时间为北京时间 Instant now2 = Instant.now().plusMillis(TimeUnit.HOURS.toMillis(8)); //获取格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)距离当前时间的秒/毫秒值 System.out.println("距离1970年01月01日00时00分00秒 : "+now2.getEpochSecond() + "秒"); System.out.println("距离1970年01月01日00时00分00秒 : "+now2.toEpochMilli() + "毫秒");输出结果:
距离1970年01月01日00时00分00秒 : 1609435201秒
距离1970年01月01日00时00分00秒 : 1609435201645毫秒
4.1 java.time.Instant.from(TemporalAccessor temporal)源码:
public static Instant from(TemporalAccessor temporal) { if (temporal instanceof Instant) { return (Instant) temporal; } Objects.requireNonNull(temporal, "temporal"); try { long instantSecs = temporal.getLong(INSTANT_SECONDS); int nanoOfSecond = temporal.get(NANO_OF_SECOND); return Instant.ofEpochSecond(instantSecs, nanoOfSecond); } catch (DateTimeException ex) { throw new DateTimeException("Unable to obtain Instant from TemporalAccessor: " + temporal + " of type " + temporal.getClass().getName(), ex); } }参数:temporal 是要转换的时间对象,返回的是一个转换为Instant的瞬间值
如果转换为Instant的时候失败,会抛出异常``DateTimeException`
4.2 parse方法源码
public static Instant parse(final CharSequence text) { return DateTimeFormatter.ISO_INSTANT.parse(text, Instant::from); }创建自定义的时间戳
//创建自定义的时间戳 System.out.println(Instant.parse("2020-12-29T14:35:32.631Z"));输出结果
2020-12-29T14:35:32.631Z
输出结果:
false
true
false
相差天数 = 0
相差小时 = 1
相差毫秒数 = 3600000
到此这篇关于Java8 Instant时间戳使用小记的文章就介绍到这了,更多相关Java8 Instant时间戳内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
前言Java8提供了一套新的时间api,比之前的Calendar类要简单明了很多。常用的有三个类Instant、LocalDate、LocalDateTime,
一、简述首先,Java8引入了java.time.LocalDate来表示一个没有时间的日期。其次,使用Java8版本,还需要更新java.sql.Date,以
LocalDate、LocalTime、LocalDateTime是Java8开始提供的时间日期API,主要用来优化Java8以前对于时间日期的处理操作。然而,
前言前段时间公司书架多了一本《Java8实战》,毕竟久闻lambda的大名,于是借来一阅。这一看,简直是惊为天人啊,lambda,stream,java8里简直
扩展Hibernate注解@CreationTimestamp,@UpdateTimestamp支持Java8新的时间类型Hibernateversion:4.