嗯,我目前正在爲android構建一個應用程序,我需要存儲一天並計算直到那一天到來的天數。在Android上計數日期
我存儲共享首選項的一天。首先,我初始化日曆。
Calendar next = Calendar.getInstance();
Calendar now = Calendar.getInstance();
然後我設定的「下一個」日曆
nday = prefs.getInt("d", 0);
nmonth = prefs.getInt("m",0);
nyear = prefs.getInt("y",0);
next.set(nyear, nmonth, nday);
然後,我這樣做是爲了計算在多少天內。
diff =next.getTimeInMillis()-now.getTimeInMillis();
diffDays = diff/(24 * 60 * 60 * 1000);
output.setText(diffDays + " Days left");
這就是問題所在。計算器在2天前工作得很好。當它應該說「3天」時,它寫着「2天」,它仍然有一天錯了。如果我嘗試關閉並打開應用程序,有時它會計算正確的日期,有時會錯過一天...有人可以理解最新的錯誤嗎?我有差異和diffDays只要。我想他們投以int,但我仍然得到了同樣的問題,有時它寫入還剩3天,有時2 ....
好,我發現瞭如何解決這個問題。看來中的getInstance有差異以毫秒爲單位,所以我做了這個
Calendar now = Calendar.getInstance();
now.set(Calendar.HOUR_OF_DAY,00);
now.set(Calendar.MINUTE ,00);
now.set(Calendar.SECOND,00);
now.set(Calendar.MILLISECOND,00);
從共享首選項
nday = extras.getInt("nDay");
nmonth = extras.getInt("nMonth");
nyear = extras.getInt("nYear");
//set the calendar
next.set(nyear, nmonth, nday, 00, 00,00);
next.set(Calendar.MILLISECOND,00);
獲得當天最後計算出的差異
long diff = 0;
diff = next.getTimeInMillis()-now.getTimeInMillis();
diffDays = diff/(24 * 60 * 60 * 1000);
output.setText(diffDays + " Days");
現在我得到了真正的差別沒有任何錯誤,謝謝大家的幫助!
當您創建日期時,您是否正在清理它們,以便它們適當地參考午夜而不是創建它們的小時和分鐘? –
我使用Calendar.getInstance() 我該如何清潔它們? –
通過將MINUTES,SECONDS和MILLISECONDS字段設置爲0來清除它們。 – Stephan