2014-09-12 122 views
-1

我需要將兩個日期之間的天數進行分類,而不使用任何庫提供的任何日期或日曆類。計算兩個不帶庫的日期之間的天數

這裏是我的想法:

numberOfDays = Math.abs((toYear - fromYear) * 365); 
numberOfDays = numberOfDays + Math.abs((toMonth - fromMonth) * 12); 
numberOfDays = numberOfDays + Math.abs((toDay - fromDay)); 

的思考?

+1

爲什麼沒有任何圖書館? – 2014-09-12 20:54:34

+1

到目前爲止,你有沒有嘗試過任何東西?堆棧溢出不是代碼寫入服務。 – hexafraction 2014-09-12 20:54:37

+0

您使用的是什麼版本的Java? – Teetrinker 2014-09-12 20:55:11

回答

1

在Java 8,你可以做到以下幾點:

long days = ChronoUnit.DAYS.between(LocalDate.of(2014, Month.MARCH, 01), LocalDate.of(2014, Month.FEBRUARY, 15)); 
+0

使用Java 6 .... – Joly 2014-09-12 21:00:09

+0

這也意味着使用庫函數;) – MadProgrammer 2014-09-12 22:16:27

+0

我隱式地將其讀爲第三方庫。完全沒有圖書館的工作可能會有點乏味。 – Teetrinker 2014-09-13 07:47:52

1
  1. 多少天的開始日期和月末之間?
  2. 直到年底每個整月的幾天?
  3. 直到結束日期的年份(閏年),每一整年的幾天?
  4. 直到上個月每個整月的幾天?
  5. 從上個月開始到結束日期有多少天?

其中一些數字可能爲零。

0
public class test { 

    public static void main(String[] args) { 
     Calendar cal = Calendar.getInstance(); 
     cal.set(2014, 8, 1, 0, 0, 0); 
     Date s = cal.getTime(); 

     Date e = new Date(); 

     System.out.println(days(s,e)); 
    } 

    public static int days(Date start, Date end){ 
     double aTms = Math.floor(start.getTime() - end.getTime()); 
     return (int) (aTms/(24*60*+60*1000)); 
    } 

} 
0

會這樣嗎?

//get 2 random dates 
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); 
Date date1 = new Date(); 
Date date2 = sdf.parse("2014-9-12"); 

final long msInADay = 24*60*60*1000; //turn a day to ms 

//divide time difference by the ms of a day 
int difference = (int)((date2.getTime() - date1.getTime())/msInADay); 

System.out.println(Math.abs(difference));//Math.abs so you can subtract dates in any order. 

編輯更新您的問題後: 你可以這樣做:

static int calcDayDiff(int startY, int startM, int startD, int endY, int endM, int endD){ 
    int result = (startY - endY) * 365; 
    result += (startM - endM) * 31; 
    result += (startD - endD); 
    return Math.abs(result); 
} 

測試用:System.out.println(calcDayDiff(2014,9,13,2013,8,12));將打印397

但請注意,這不是因爲一個很好的解決方案不是每個月都包含31天,而不是每年都有365。您可以通過在方法中添加一些簡單的邏輯來修復月份日差異,而不是總是乘以31。既然這是一個任務,我想你可以考慮每年有365天。

+0

它打印430日01/09/00至1999年12月30日所以不正確恐怕 – Joly 2014-09-12 23:43:59

+0

對我來說它打印243.你確定你已經正確地通過了爭論'calcDayDiff(2000,9,1,1999 ,12,30)'? – qbit 2014-09-12 23:49:18

+0

用戶錯誤:)))但01/01/2000至30/12/1999 = 5 – Joly 2014-09-12 23:58:47