2012-10-22 73 views
1

所以我想減去2日我想出了這個代碼:的Android減法日期

java.text.DateFormat df = new java.text.SimpleDateFormat("hh:mm:ss_yyyy.MM.dd"); 
java.util.Date date1 = new java.util.Date(); 
java.util.Date date2 = df.parse("00:00:00_2013.01.01"); 
long diff = date2.getTime() - date1.getTime(); 

但問題是DIFF是不正確的。

有人可以告訴我我做錯了什麼嗎?

+0

你爲什麼要把它們變成日期然後減去?簡單地減去長的值,然後將結果轉換爲日期時間:) – Lucifer

+1

問題是'diff'代表什麼?天的差異?周?年份?分鐘?你的解決方案@Lucifer將帶來瘋狂的結果。昨天從今天減去將導致02.01.1970這意味着你要什麼? – WarrenFaith

+0

我有實際的日期「新日期()」和結束日期。 –

回答

5

你在評論中的比較樣本是錯誤的。我試過你的代碼,並得到這個結果:

try { 
    DateFormat df = new SimpleDateFormat("hh:mm:ss_yyyy.MM.dd"); 
    Date date1 = new java.util.Date(); 
    Date date2 = df.parse("00:00:00_2013.01.01"); 
    long diff = date2.getTime() - date1.getTime(); 
    Log.e("TEST" , date1.getTime() + " - " + date2.getTime() + " - " + diff); 
} catch (ParseException e) { 
    Log.e("TEST", "Exception", e); 
} 

date1: 1350921506492 
date2: 1356994800000 
diff: 6073293508 

diff/1000/60/60/24 = 70,292748935 

大致檢查70天,直到新的一年聽起來堅實。

+1

爲什麼java日期類太可怕了? C#DateTime大大簡化了工作。 – Zapnologica

+1

@Zapnologica與最早版本的Java捆綁在一起的舊日期時間類是業界首次認真對待日期時間這個非常棘手的問題,這個問題幾十年來一直被忽視。這些類是基於在IBM和Taligent完成的工作。但是你是對的,最終他們失敗了,在設計和實施上都有缺陷。解決方案是開源的Joda-Time庫或Java 8及更高版本中內置的新Java時間包(受Joda-Time啓發)。 –