這個問題在這里已經有了答案: 日期和時間未更新 2 個答案 4天前關閉。
如何在不創建新實體的情況下更新/重繪 Java 中 Date 物件中的時間?下面的代碼有效,但我不想為計時器創建一個新實體兩次。有沒有更好的方法來實作這一點?在我的真實代碼中,我需要回圈執行此操作,并且我不能每次都創建一個新實體。我只想創建一次物件,然后盡可能將其更新為當前時間。
public static void main(String[] args)
{
Date timer;
long startTime_ms, endTime_ms;
long timeDifference_ms;
timer = new Date();
startTime_ms = timer.getTime();
System.out.println("Start time [ms]: " startTime_ms);
// 250ms delay
try
{
Thread.sleep(250); // It seems sleep commands always require a try in Java
}
catch (InterruptedException e)
{
System.out.println("Error while waiting!");
e.printStackTrace();
}
timer = new Date();
endTime_ms = timer.getTime();
timeDifference_ms = endTime_ms-startTime_ms;
System.out.println("End time [ms]: " endTime_ms);
System.out.println("Time difference [m]: " timeDifference_ms);
}
上面代碼的輸出是:
開始時間[ms]:1647614880579
結束時間[ms]:1647614880841
時差[米]:262
uj5u.com熱心網友回復:
我不會使用 Date 類來獲取毫秒數。就我個人而言,我喜歡使用:System.currentTimeMillis();
它是一種簡單的方法,不會創建任何變數并回傳毫秒的長值。
使用您的代碼的示例:
public static void Main(String[] args){
long startTime_ms, endTime_ms;
long timeDifference_ms;
startTime_ms = System.currentTimeMillis();
System.out.println("Start time [ms]: " startTime_ms);
// 250ms delay
try
{
Thread.sleep(250); // It seems sleep commands always require a try in Java
}
catch (InterruptedException e)
{
System.out.println("Error while waiting!");
e.printStackTrace();
}
endTime_ms = System.currentTimeMillis();
timeDifference_ms = endTime_ms-startTime_ms;
System.out.println("End time [ms]: " endTime_ms);
System.out.println("Time difference [m]: " timeDifference_ms);
}
這在大多數情況下都很好,但隨之而來的是一些小錯誤。另一種選擇是System.nanoTime()用于更精確和準確的計算以及不基于日期和時間的計算。它不會根據您的時鐘時間變化而更改,因此它不太可能出現錯誤。
例子:
long start_nano, end_nano;
long time_difference_nano;
start_nano = System.nanoTime();
try{Thread.sleep(100);}
catch(Exception e){
System.out.println("Error!");
e.printStackTrace();
}
end_nano = System.nanoTime();
time_difference_nano = end_nano-start_nano;
System.out.println("End time [ms]: " end_nano);
System.out.println("Time difference [m]: " time_difference_nano);
uj5u.com熱心網友回復:
第一個想法是:來吧,做一個新的物件。這不會成為代碼中最大的垃圾來源。
不要使用 java.util.Date 或 Calendar,從 1.8 開始就有 java.time api。所有這些類都是不可變的,不會用新資料更新它們中的任何一個。如果您不知何故被困在 1.8 之前的 java 上,那是 Joda 時間。
替代方案:您可以使用 long 來保存時間戳而不是 Date。Date 是一個 long 值的包裝器。你可以在不創建新物件的情況下盡可能多地更新它(只要你不做一些使自動裝箱啟動的事情)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/447517.html
