一、返回的是毫秒
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