timestamp深入分析

一.基本操作

最近看到组内对timestamp的操作,非常有技巧。

先看一个标准的timestamp,2014-01-05 15:57:27的timestamp:

1388908647148

timestamp一共由13位数字组成,拆分一下:

1388908,647,148

其中末尾3位表示毫秒,比如上面表示148ms,中间8647表示多少秒。

 

1. 1388908647148/1000=1388908647得到基于秒的timestamp。

2. 1388908647-3600=1388905047,可以得到上一个小时的timestamp(14:57:27)。

3. 1388908647-60=1388908587,可以得到上一分钟的timestamp(15:56:27)。

4. 1388908647%3600=3447,可以得到当前timestamp属于这个小时中的第几秒。

5. 1388908647-1388908647%3600=1388905200,可以得到基于小时的timestamp

问题

下面两个timestamp相差多少呢?

1388908,000,000

1388909,000,000

答案是相差1000秒。验证一下,分别转换为Date:15:46:40,16:03:20。1000秒等于16分钟+40秒,吻合。

 

二.基于时间粒度(base time interval)

时间序列统计要求我们基于某个时间粒度为聚合计算,比如按照1秒,10秒,60等。这样时间实际被分成一个小块,如果按照10秒,那一分钟有60个快,对于任意一个timestamp应该如何转换成某个时间粒度的时间呢?

long current_time = System.currentTimeMillis();

long intervalInMillis=5000;

(current_time/intervalInMillis)*intervalInMillis实际上就得到时间粒度的时间。

猜你喜欢

转载自san-yun.iteye.com/blog/1999171