[英]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 個詞回答您的問題,“不”是不可能的,但是值得意識到這一點。 如果您使用默認值,即每日滾動,則編年史隊列將每天為其數據創建一個新的隊列文件。 周期數與另一個詞哪個文件(但不是時間)的日期直接相關。 注意:從周期數計算出當天的計算必須考慮在編年史隊列中設置的 EPOCH 時間。 如果這種粒度級別足夠(換句話說,您想要哪一天而不是當天的時間),那么上面彼得的帖子會告訴您如何從周期數中獲取日期。 還有其他方法可以找出不使用循環編號的條目何時寫入。 如果您希望我介紹這些其他方式,請告訴我。
給定一個循環數,您可以執行以下操作(Kotlin):
fun rollCycleToTimestamp(cycle: Long) = Instant.ofEpochMilli(rollingCycle.lengthInMillis() * cycle)
每個滾動周期類型都有自己的“lengthInMillis”,因此如果您將其乘以周期數,您將獲得毫秒格式的紀元時間。
這也是適用於任何滾動循環類型的通用解決方案。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.