簡體   English   中英

編年史隊列:將循環整數轉換為時間戳,反之亦然

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM