Chronicle Queue:将循环整数转换为时间戳,反之亦然

时间:2017-03-01 10:19:34

标签: java chronicle chronicle-queue

有没有办法在Chronicle Queue中的某个周期之间转换为时间戳?我检查了4.5 apidocs并没有找到任何东西。

3 个答案:

答案 0 :(得分:2)

周期数是自纪元以来的天数(或小时数)。如果你的纪元是0,那么时间戳是

Date date = new Date(TimeUnit.DAYS.toMillis(cycle)); 

您可以使用

执行相反的操作
long cycle = TimeUnit.MILLIS(System.currentTimeMillis()).toDays()

如果你有一个小时的周期,你可以用几小时以上来代替天。

使用内置函数,您可以在任何滚动循环中执行此操作。

int cycle = rollCycle.current(() -> time, epoch);

答案 1 :(得分:1)

用1个字回答你的问题,“不”,这是不可能的,但值得注意的是。如果您使用的是每日滚动的默认值,则chronicle队列将每天为其数据创建一个新的队列文件。循环次数与另一个文件(但不是时间)的日期直接相关。注意:从循环编号中计算出当天的计算必须考虑在编年史队列中设置的EPOCH时间。如果这个粒度级别足够(换句话说你想要哪一天而不是那天的时间),那么上面的Peter的帖子告诉你如何从循环数中得到这一天。还有其他方法可以找出何时写入不使用循环编号的条目。如果您希望我介绍其他方式,请与我联系。

答案 2 :(得分:1)

给定一个周期数,你可以做这样的事情(Kotlin):

fun rollCycleToTimestamp(cycle: Long) = Instant.ofEpochMilli(rollingCycle.lengthInMillis() * cycle)

每种滚动周期类型都有自己的“lengthInMillis”,因此如果您将其乘以周期数,您将获得毫秒格式的纪元时间。

这也是适用于任何滚动循环类型的通用解决方案。