在Java編程中,獲取當前時間戳是一個常見需求,時間戳可以保存為long類型的整數,是指從1970年1月1日0時0分0秒(UTC,即格林威治標準時間)開始到當前時間的秒數。以下是幾種獲取Java當前時間戳的方法:
一、使用System.currentTimeMillis()
long timestamp = System.currentTimeMillis();
System.currentTimeMillis()返回從UTC 1970年1月1日0時0分0秒到當前時間的毫秒數,我們可以直接除以1000轉換成秒數,也可以將返回值直接保存到long類型的變量中。
使用System.currentTimeMillis()方法獲取時間戳的優點是方法執行速度快,缺點是返回值只能精確到毫秒級,如果需要更精確的時間戳,可以使用System.nanoTime()方法。
二、使用Instant.now().getEpochSecond()
long timestamp = Instant.now().getEpochSecond();
Instant類是Java 8新增的API,可以用來表示時間線上的一個瞬間。可以獲取當前的Instant實例,然后調用getEpochSecond()方法得到從UTC 1970年1月1日0時0分0秒到當前時間的秒數。
使用Instant類獲取時間戳的優點是可以精確到納秒級別,缺點是代碼編寫比較麻煩,而且需要使用Java 8以上的版本。
三、使用new Date().getTime()
long timestamp = new Date().getTime();
在早期版本的Java中,我們可以使用Date類來獲取當前時間戳,調用getTime()方法可以獲得從UTC 1970年1月1日0時0分0秒到當前時間的毫秒數。
使用Date類獲取時間戳的缺點是它已經過時,不建議使用,多線程環境下可能存在線程安全問題。
四、使用Calendar.getInstance().getTime().getTime()
long timestamp = Calendar.getInstance().getTime().getTime();
我們也可以使用Calendar類來獲取當前時間戳,首先需要獲取一個實例,然后調用getTime()方法得到一個Date對象,再調用Date對象的getTime()方法即可獲得時間戳。
Calendar類獲取時間戳和Date類類似,同樣已經過時,也不建議使用。
五、通過java.sql.Timestamp獲取當前時間戳
Timestamp timestamp = new Timestamp(System.currentTimeMillis());
long ts = timestamp.getTime();
Timestamp類也可以用來表示時間戳,它可以精確到納秒級別。我們可以創建一個Timestamp實例,傳入System.currentTimeMillis()方法的返回值作為參數,然后調用getTime()方法即可得到時間戳。
使用Timestamp類獲取時間戳的缺點是代碼比較冗長,需要創建對象。
六、使用Joda-Time類庫獲取當前時間戳
long timestamp = DateTime.now().getMillis() / 1000;
Joda-Time類庫是常用的Java時間和日期操作類庫,它提供了多種方式來獲取當前時間戳。
我們可以使用DateTime類來表示當前時間,調用getMillis()方法可以獲得從UTC 1970年1月1日0時0分0秒到當前時間的毫秒數,然后除以1000即可得到時間戳。
使用Joda-Time類庫獲取時間戳可以簡潔明了,而且可以精確到毫秒級別。