亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在java中以納秒為單位獲取當前時間?

如何在java中以納秒為單位獲取當前時間?

楊__羊羊 2021-08-19 17:49:03
我做了很多研究,但沒有找到任何好的答案。我想在納秒內獲得當前日期和時間。我發現這System.nanoTime()將提供納秒,但這是系統經過的時間。意味著它將提供系統啟動的時間。我需要以納秒為單位使用當前日期和時間。我需要這個來避免 InfluxDB 中的點重復,請參閱InfluxDB 如何處理重復點?所以當我使用毫秒時,我面臨著數據聯合的問題。所以需要決定使用納秒,但問題是當生成納秒時,第二個使用System.nanoTime()不包含當前日期和時間數據。它給了我 JVM 正常運行時間,這對我來說毫無用處。
查看完整描述

3 回答

?
慕尼黑的夜晚無繁華

TA貢獻1864條經驗 獲得超6個贊

理論上,可以將當前時間精確到納秒級,如下所示:


Clock clock = Clock.systemDefaultZone();

Instant instant = clock.instant();   // or Instant.now();

long seconds = instant.getEpochSecond();

long nano = instant.getNano();

// epoch nanoseconds = seconds * 10E9 + nano

問題:


該systemDefaultZone()調用為平臺提供了“最佳可用時鐘”。JVM 規范說這可能比毫秒精度更好,但這不能保證。因此該nano值的精度可能不會超過毫秒。


seconds 和 nano 的值取決于本地硬件時鐘的準確性。在許多系統上,保持本地時鐘與“真實”時間同步是很困難的。通常,亞毫秒級精度具有挑戰性,而明顯的納秒級精度只是一種錯覺。


即使您已經設法將硬件時鐘與“實時”時間同步到納秒精度,進行上述調用以獲取紀元納秒時間的開銷和可變性將破壞納秒精度。(諸如內存緩存可變性、主內存總線的繁忙程度等。以及自上次同步以來本地硬件時鐘的漂移。)


實際上,在大多數系統上,納秒精度是無法實現的,因此您需要避免依賴于此的設計/算法。




查看完整回答
反對 回復 2021-08-19
?
弒天下

TA貢獻1818條經驗 獲得超8個贊

從Instant.now(). 這是否足以解決你的問題,我不敢說。當然,在普通計算機上無法獲得納秒精度。


您可能需要通過添加人工納秒來玩一些技巧,以防Instant.now()兩次返回相同的值。


或者簡單地使用鏈接中提到的技巧:


引入一個任意的新標簽來強制唯一性。


對于添加人工納秒的技巧,您可以使用以下內容:


public class TimeProvider {


    Instant last = Instant.now().minusSeconds(1);


    Instant getUniqueInstant() {

        Instant result = Instant.now();

        if (! result.isAfter(last)) {

            result = last.plusNanos(1);

        }

        last = result;

        return result;

    }

}

當我在我的計算機上從這個類中快速連續繪制時間時,我得到如下結果。從輸出看來(我解釋它的方式):


我的 JVM 無法從系統時鐘獲得比微秒(秒為 6 位小數)更高的精度。

不時添加一個人工納秒以保持瞬間的獨特性。

.


2018-08-29T15:18:35.617616001Z

2018-08-29T15:18:35.617617Z

2018-08-29T15:18:35.617618Z

2018-08-29T15:18:35.617618001Z

2018-08-29T15:18:35.617619Z

2018-08-29T15:18:35.617619001Z

2018-08-29T15:18:35.617620Z

2018-08-29T15:18:35.617620001Z

2018-08-29T15:18:35.617621Z

2018-08-29T15:18:35.617621001Z

2018-08-29T15:18:35.617622Z

2018-08-29T15:18:35.617623Z

2018-08-29T15:18:35.617623001Z

2018-08-29T15:18:35.617624Z

2018-08-29T15:18:35.617624001Z

2018-08-29T15:18:35.617625Z

2018-08-29T15:18:35.617625001Z

2018-08-29T15:18:35.617626Z

2018-08-29T15:18:35.617626001Z

2018-08-29T15:18:35.617627Z

2018-08-29T15:18:35.617627001Z

2018-08-29T15:18:35.617628Z

2018-08-29T15:18:35.617631Z

2018-08-29T15:18:35.617634Z

2018-08-29T15:18:35.617635Z

2018-08-29T15:18:35.617636Z

2018-08-29T15:18:35.617636001Z

2018-08-29T15:18:35.617637Z

2018-08-29T15:18:35.617637001Z

2018-08-29T15:18:35.617638Z


查看完整回答
反對 回復 2021-08-19
  • 3 回答
  • 0 關注
  • 1007 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號