最近測試給我們反饋了一個bug,說是程序運行天數計算錯誤,應該按照自然天數計算,之前的實現很簡單,如下:
//程序啟動時 long start = System.currentTimeMillis();
... //需要計算運行天數時,計算差值 long end = System.currentTimeMillis(); long days = (end - start) / (1000 * 60 * 60 * 24); return days;
測試提出問題后,我們也覺得計算方式不對,打算修改算法以計算自然天數,網上隨便一搜,都是上面的方法,還是老老實實自己寫吧,如下:
/** * 計算規則————按自然天數計算 * 實現方式: * 1,程序啟動時記錄保護開始時間 * 2,此后進主界面與此時間求差值,在此后(0, 24]小時區間內不跨到第二天記1天,跨天記2天,以此類推(24, 48]小時區間不跨到第三天記2天,跨天記3天...畫數軸就知道怎么回事了 * */ //程序啟動時 long start = System.currentTimeMillis();
... //需要計算運行天數時,計算差值 long end = System.currentTimeMillis(); long days = (end - start) / (1000 * 60 * 60 * 24); //運行天數從1開始計數 long runningDays = days + 1; //判斷是否跨天,若跨天,運行天數還要+1 long probableEndMillis = start + (1000 * 60 * 60 * 24) * days;
if(new Date(probableEndMillis).getDay() != new Date(end).getDay())
{
runningDays++;
}
return runningDays;