Chronicle Queue:将周期整数转换为时间戳,反之亦然
Chronicle Queue: Convert cycle integer to timestamp and vice-versa
有没有办法将 Chronicle Queue 中的某个周期转换为时间戳?我检查了 4.5 apidocs 并没有找到任何东西。
周期数是自纪元以来的天数(或小时数)。如果你的纪元是0那么时间戳是
Date date = new Date(TimeUnit.DAYS.toMillis(cycle));
你可以用
做相反的事情
long cycle = TimeUnit.MILLIS(System.currentTimeMillis()).toDays()
如果你有一个小时周期,你可以用上面的小时代替天。
使用内置函数,您可以为任何滚动周期执行此操作。
int cycle = rollCycle.current(() -> time, epoch);
要用 1 个词回答您的问题,"no" 这是不可能的,但值得一提的是。如果您使用的是默认值,即每天滚动,那么编年史队列每天都会为其数据创建一个新的队列文件。周期数与文件的日期(而不是时间)直接相关。注意:从周期数计算出日期的计算必须考虑在编年史队列中设置的 EPOCH 时间。如果这种粒度级别足够(换句话说,您想要哪一天而不是那一天的时间),那么上面 Peter 的 post 会告诉您如何从周期数中获取日期。还有其他方法可以找出不使用循环号的条目的写入时间。如果您希望我介绍这些其他方式,请告诉我。
给定一个周期数,你可以这样做 (Kotlin):
fun rollCycleToTimestamp(cycle: Long) = Instant.ofEpochMilli(rollingCycle.lengthInMillis() * cycle)
每个滚动周期类型都有它自己的 'lengthInMillis',因此如果您将其乘以周期数,您将得到毫秒格式的纪元时间。
这也是适用于任何滚动循环类型的通用解决方案。
有没有办法将 Chronicle Queue 中的某个周期转换为时间戳?我检查了 4.5 apidocs 并没有找到任何东西。
周期数是自纪元以来的天数(或小时数)。如果你的纪元是0那么时间戳是
Date date = new Date(TimeUnit.DAYS.toMillis(cycle));
你可以用
做相反的事情long cycle = TimeUnit.MILLIS(System.currentTimeMillis()).toDays()
如果你有一个小时周期,你可以用上面的小时代替天。
使用内置函数,您可以为任何滚动周期执行此操作。
int cycle = rollCycle.current(() -> time, epoch);
要用 1 个词回答您的问题,"no" 这是不可能的,但值得一提的是。如果您使用的是默认值,即每天滚动,那么编年史队列每天都会为其数据创建一个新的队列文件。周期数与文件的日期(而不是时间)直接相关。注意:从周期数计算出日期的计算必须考虑在编年史队列中设置的 EPOCH 时间。如果这种粒度级别足够(换句话说,您想要哪一天而不是那一天的时间),那么上面 Peter 的 post 会告诉您如何从周期数中获取日期。还有其他方法可以找出不使用循环号的条目的写入时间。如果您希望我介绍这些其他方式,请告诉我。
给定一个周期数,你可以这样做 (Kotlin):
fun rollCycleToTimestamp(cycle: Long) = Instant.ofEpochMilli(rollingCycle.lengthInMillis() * cycle)
每个滚动周期类型都有它自己的 'lengthInMillis',因此如果您将其乘以周期数,您将得到毫秒格式的纪元时间。
这也是适用于任何滚动循环类型的通用解决方案。