Java中的System.currentTimeMillis()函數

一、返回的是毫秒

System.currentTimeMillis()函數是Java中一個返回當前時間的函數,這個時間是從1970年1月1日00:00:00 GMT開始的毫秒數。因此,該函數返回的是毫秒數而不是秒數。

    long timeInMillis = System.currentTimeMillis();
    System.out.println("當前時間:" + timeInMillis + "毫秒");

上述代碼會輸出當前時間的毫秒數。

而且,在Java中有許多與時間相關的類和方法都是以毫秒為單位的,比如Thread.sleep()方法的參數就是毫秒數。

    try {
        // 暫停當前線程2秒鐘
        Thread.sleep(2000);
    } catch (InterruptedException e) {
        e.printStackTrace();
    }

上述代碼會使得當前線程暫停2秒鐘。

二、與大數字的處理

毫秒數可以很好地處理大數字,例如處理日期時間轉換時會使用到毫秒數,在某些系統中,時間的精度更高需要使用到納秒級別的時間。使用毫秒可以很好地解決這個問題。

    SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SSS");
    String dateString = formatter.format(new Date(timeInMillis));
    System.out.println(dateString);

上面的代碼可以將當前時間轉換成指定格式的字元串。

三、多線程下的時間同步問題

在多線程環境下,使用System.currentTimeMillis()的時候需要注意線程的同步問題。由於每個線程都有自己的上下文,因此在線程上下文切換時,如果另一個線程更新了時間,那麼獲取的時間就可能會不準確。

為了解決這個問題,我們可以使用ThreadLocal來存儲每個線程的毫秒數,從而避免在不同線程之間發生時間同步衝突的問題。

    private static final ThreadLocal<Long> threadLocal = new ThreadLocal<Long>(){
        @Override
        protected Long initialValue() {
            return System.currentTimeMillis();
        }
    };
    long timeInMillis = threadLocal.get();

上面的代碼使用了ThreadLocal來避免多線程中使用System.currentTimeMillis()發生的時間同步問題。

四、時間的比較

我們可以使用毫秒數來比較兩個時間的先後順序,比如判斷一個時間是否在另一個時間之前、之後還是同時。我們可以將時間轉換成毫秒數進行比較,這種方式比較簡單、高效。

    long startTime = System.currentTimeMillis();
    // 執行一些操作
    long endTime = System.currentTimeMillis();
    if (endTime < startTime) {
        System.out.println("結束時間早於起始時間");
    } else if (endTime > startTime) {
        System.out.println("結束時間晚於起始時間");
    } else {
        System.out.println("開始時間和結束時間相同");
    }

上述代碼可以比較兩個時間的先後順序。

五、時間的加減計算

我們可以使用毫秒數進行時間的加減計算,非常方便。

    long timeInMillis = System.currentTimeMillis();
    // 加上5分鐘
    timeInMillis += 5 * 60 * 1000;
    System.out.println("5分鐘後:" + new Date(timeInMillis));
    // 減去10秒鐘
    timeInMillis -= 10 * 1000;
    System.out.println("10秒鐘前:" + new Date(timeInMillis));

上述代碼可以對當前時間進行加減計算。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/159735.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-11-20 00:15
下一篇 2024-11-20 00:15

相關推薦

  • java client.getacsresponse 編譯報錯解決方法

    java client.getacsresponse 編譯報錯是Java編程過程中常見的錯誤,常見的原因是代碼的語法錯誤、類庫依賴問題和編譯環境的配置問題。下面將從多個方面進行分析…

    編程 2025-04-29
  • Python中引入上一級目錄中函數

    Python中經常需要調用其他文件夾中的模塊或函數,其中一個常見的操作是引入上一級目錄中的函數。在此,我們將從多個角度詳細解釋如何在Python中引入上一級目錄的函數。 一、加入環…

    編程 2025-04-29
  • Java JsonPath 效率優化指南

    本篇文章將深入探討Java JsonPath的效率問題,並提供一些優化方案。 一、JsonPath 簡介 JsonPath是一個可用於從JSON數據中獲取信息的庫。它提供了一種DS…

    編程 2025-04-29
  • Java Bean載入過程

    Java Bean載入過程涉及到類載入器、反射機制和Java虛擬機的執行過程。在本文中,將從這三個方面詳細闡述Java Bean載入的過程。 一、類載入器 類載入器是Java虛擬機…

    編程 2025-04-29
  • Java騰訊雲音視頻對接

    本文旨在從多個方面詳細闡述Java騰訊雲音視頻對接,提供完整的代碼示例。 一、騰訊雲音視頻介紹 騰訊雲音視頻服務(Cloud Tencent Real-Time Communica…

    編程 2025-04-29
  • Python中capitalize函數的使用

    在Python的字元串操作中,capitalize函數常常被用到,這個函數可以使字元串中的第一個單詞首字母大寫,其餘字母小寫。在本文中,我們將從以下幾個方面對capitalize函…

    編程 2025-04-29
  • Java Milvus SearchParam withoutFields用法介紹

    本文將詳細介紹Java Milvus SearchParam withoutFields的相關知識和用法。 一、什麼是Java Milvus SearchParam without…

    編程 2025-04-29
  • Python中set函數的作用

    Python中set函數是一個有用的數據類型,可以被用於許多編程場景中。在這篇文章中,我們將學習Python中set函數的多個方面,從而深入了解這個函數在Python中的用途。 一…

    編程 2025-04-29
  • Java 8中某一周的周一

    Java 8是Java語言中的一個版本,於2014年3月18日發布。本文將從多個方面對Java 8中某一周的周一進行詳細的闡述。 一、數組處理 Java 8新特性之一是Stream…

    編程 2025-04-29
  • 三角函數用英語怎麼說

    三角函數,即三角比函數,是指在一個銳角三角形中某一角的對邊、鄰邊之比。在數學中,三角函數包括正弦、餘弦、正切等,它們在數學、物理、工程和計算機等領域都得到了廣泛的應用。 一、正弦函…

    編程 2025-04-29

發表回復

登錄後才能評論