2014-01-07 32 views
2

我試圖讓下面的方式,但我的嚮導指示我做不使用API​​ .. 任何一個可以給它的解決方案?如何讓DIFF /黑白兩個日期,而無需使用API​​?

public class DateDifferenceExample{ 

    public static void main(String[] args){ 

    //get instance of Calendar objects 
    Calendar cal1 = Calendar.getInstance(); 
    Calendar cal2 = Calendar.getInstance(); 

    //set two dates we want to know difference of 
    cal1.set(2006, 12, 30); 
    cal2.set(2007, 5, 3); 

    long milis1 = cal1.getTimeInMillis(); 
    long milis2 = cal2.getTimeInMillis(); 

    //difference in milliseconds 
    long diff = milis2 - milis1; 

    //difference in seconds 
    long diffSeconds = diff/1000; 

    //difference in minutes 
    long diffMinutes = diff/(60 * 1000); 

    //difference in hours 
    long diffHours = diff/(60 * 60 * 1000); 

    //difference in days 
    long diffDays = diff/(24 * 60 * 60 * 1000); 

    System.out.println("Date difference in milliseconds: " + diff + " milliseconds.");  
    System.out.println("Date difference in seconds: " + diffSeconds + " seconds."); 
    System.out.println("Date difference in minutes: " + diffMinutes + " minutes."); 
    System.out.println("Date difference in hours: " + diffHours + " hours.");  
    System.out.println("Date difference in days: " + diffDays + " days."); 

    } 
} 
+1

寫在紙上的解決方案。然後在junit寫一個測試。然後編寫你的代碼。你的問題並沒有真正增加任何價值爲今後遊客 – Jayan

+0

@ user3164190 - 回答修改後的校驗現在 –

回答

0

可以使用compareTo()方法或before()after()方法比較的日期。如果你需要'差異',那麼我建議你開始比較幾年,然後一個月,然後幾天。這樣你可以得到兩個日期之間的確切區別。

我不希望使用任何方法

需要使用方法來獲取年,月,日。看一看:Calendar.get()

例子:

Date1: 01/01/2014 
Date2: 02/12/2015 

Start with year. Subtract the years, use Math.abs() to get the absolute value. 
Then go for month. Subtract the months, use Math.abs() to get the absolute value. 
Then finally the day. Same story. 

The two dates are 1 year, 11 month and 1 day apart 

注:日期是在DD/MM/YYYY格式

+0

我不希望使用任何方法.. – user3164190

+0

@ user3164190看看編輯 –

0
 Calendar cal1 = Calendar.getInstance(); 
     Calendar cal2 = Calendar.getInstance(); 
     cal1.set(2006, 12, 30); 
     cal2.set(2007, 5, 3); 
     long startTime = cal1.getTimeInMillis(); 
     long endTime = cal2.getTimeInMillis();   

     long diff = endTime - startTime; 
     long hoursRem=diff%(1000*60*60); 
     diff=diff-hoursRem; 
     long hours=diff/(1000*60*60); 
     diff=diff+hoursRem; 
     diff = diff - (hours * 60 * 60 * 1000); 
     long minRem=diff%(1000*60); 
     diff=diff-minRem; 
     long min=diff/(1000*60); 
     diff=diff+minRem; 
     diff = diff - (min * 60 * 1000); 
     long seconds=diff/1000; 
     System.out.println("hh = "+hours +" min ="+min+" sec= "+seconds); 
+0

OP不希望的方法。自己實現邏輯:) –

0

的代碼就可以了。但它可能不是確切的幾天,因爲它不需要夏令時。

考慮這個

GregorianCalendar c1 = new GregorianCalendar(2014, 2, 29, 4, 0, 0); 
    GregorianCalendar c2 = new GregorianCalendar(2014, 2, 30, 4, 0, 0); 

天差爲1整天。但是,這

System.out.println(c2.getTimeInMillis() - c1.getTimeInMillis()); 

打印

82800000 

即以毫秒差爲1小時以下,你的diffDays代碼將產生0