时间戳相减的几种方法

本人花费半年的时间总结的《Java面试指南》已拿腾讯等大厂offer,已开源在github ,欢迎star!

本文GitHub https://github.com/OUYANGSIHAI/JavaInterview 已收录,这是我花了6个月总结的一线大厂Java面试总结,本人已拿大厂offer,欢迎star

原文链接:blog.ouyangsihai.cn >> 时间戳相减的几种方法

这两天正在写一个日报的code,其中有一处是涉及系统用时,简单来看,就是俩时间戳字段相减,方法可能有很多,这里列出一些,朋友们要是有更简单、更好玩的方法,可以回复,一起玩耍。

创建测试表,t1和t2是TIMESTAMP类型,t1比t2快1分钟,

时间戳相减的几种方法

直接使用t1-t2得到正值,t2-t1得到负值,

时间戳相减的几种方法

使用substr截取字段前18位,得到的是“yyyy-mm-dd hh24:mi:ss“格式的日期,两个日期字段相减则可以得到粒度为秒的结果值,乘以1440(24*60)*60,换算为秒,乘以1000,换算为毫秒,相减值为60000毫秒,

时间戳相减的几种方法

使用substr截取20位开始的6位,得到TIMESTAMP的6位,相减(001811-000000),

时间戳相减的几种方法

另一种方法,可以使用extract函数,得到DAY、HOUR、MINUTE、SECOND各个部分,

时间戳相减的几种方法

按照DAY、HOUR、MINUTE、SECOND各自换算为毫秒,相加得到总的毫秒,相减得到用时,单位是毫秒,这有两种用法,一种是首先换算t1和t2的值为毫秒,再相减这两个值,另一种是直接从t1-t2执行extract函数,换算为毫秒,等价的两种方法,

时间戳相减的几种方法

这种用法的优点在于,相比上面to_date相减,会有毫秒的精度,因为to_date截取了秒这一级别,毫秒被忽略了,因此使用extract函数,可以得到更精确的用时。

总结:

  1. 两个时间戳类型的字段,可以相减得到两者用时。若用to_date则会按照格式符,有一定的截断,精度会被忽略。若用extract提取,SECOND包含毫秒,因此毫秒的精度会被保存,得到的结果会更精确些。extract可以接受两个字段相减,作为参数。

  2. 实践,才可能准确、理性地知道一些用法细节。

对于上面的需求,如果有朋友有其他更好的办法,欢迎回复,一起学习!

如果您觉得此篇文章对您有帮助,欢迎关注微信公众号:bisal的个人杂货铺,您的支持是对我最大的鼓励!共同学习,共同进步:)

时间戳相减的几种方法
本人花费半年的时间总结的《Java面试指南》已拿腾讯等大厂offer,已开源在github ,欢迎star!

本文GitHub https://github.com/OUYANGSIHAI/JavaInterview 已收录,这是我花了6个月总结的一线大厂Java面试总结,本人已拿大厂offer,欢迎star

原文链接:blog.ouyangsihai.cn >> 时间戳相减的几种方法


 上一篇
Numeric Overflow,SQL问题?Java Code问题? Numeric Overflow,SQL问题?Java Code问题?
这两天出差,出发前开发同学提了一个问题,开会间隙,有了一些想法,java代码中和Oracle中均有可能出现此错误,记录于此。 一段mybatis的代码,查询一张表的数据,SQL类似如下, 接受起始时间和截止时间,作为检索条件。 现象:
下一篇 
预估表和索引空间容量的方法 预估表和索引空间容量的方法
最近有一个业务功能要上线,生产数据库环境之前已经到位,目前要做的是估算下,业务数据量对数据库空间,有何影响。开发同学根据表字段定义,分别统计出了最大占用空间,以及预计占用空间量,计算得很细致。 今儿碰巧看见了一篇MOS文章,《How to