【问题标题】:Chronicle Queue: Convert cycle integer to timestamp and vice-versaChronicle Queue:将循环整数转换为时间戳,反之亦然
【发布时间】:2017-03-01 10:19:34
【问题描述】:

有没有办法将编年史队列中的某个周期转换为时间戳?我检查了 4.5 apidocs 并没有找到任何东西。

【问题讨论】:

    标签: java chronicle chronicle-queue


    【解决方案1】:

    周期数是自纪元以来的天数(或小时数)。如果您的纪元为 0,则时间戳为

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

    你可以用

    做相反的事情
    long cycle = TimeUnit.MILLIS(System.currentTimeMillis()).toDays()
    

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

    使用内置函数,您可以对任何滚动周期执行此操作。

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

    【讨论】:

    • 谢谢!您是否考虑将其添加到 RollCycle 界面?
    • @vasquez 你能澄清一下这是做什么用的,也许还有其他方法?
    • 队列文件的归档和索引。我确实看过 StoreListener,但目前我使用了几个 Queue 实例,写入和读取,我想延迟存档,比如 1-2 天。
    • @vasquez 你可以计算几天前的日期。听起来您需要的是几天前的周期文件名
    • 长周期 = TimeUnit.MILLISECONDS.toDays(millis);更好
    【解决方案2】:

    给定一个循环数,您可以执行以下操作(Kotlin):

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

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

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 2012-01-18
        • 1970-01-01
        • 2021-08-31
        • 2013-01-30
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多