2011-10-08 39 views

回答

1

你可以使用這樣的事情:

public static void main(String[] args) { 
    Calendar cal1 = Calendar.getInstance(); 
    cal1.set(2011, 10, 10, 12, 00, 00); 
    Date datenow = cal1.getTime(); 

    Calendar cal2 = Calendar.getInstance(); 
    cal2.set(2011, 10, 14, 15, 00, 00); 
    Date datethen = cal2.getTime(); 

    // check for weekends 
    long daynow = TimeUnit.MILLISECONDS.toDays(datenow.getTime()); 
    long daythen = TimeUnit.MILLISECONDS.toDays(datethen.getTime()); 
    long daydiff = daythen - daynow; 
    long weekenddiff = daydiff/7; // number of weekends 

    if (cal1.get(Calendar.DAY_OF_WEEK) > cal2.get(Calendar.DAY_OF_WEEK)) { 
     weekenddiff++;// we have a weekend but not another full week; 
    } 
    long secDiff = TimeUnit.SECONDS.convert(16, TimeUnit.HOURS); 
    long weekendAdditionalSecDiff = TimeUnit.SECONDS.convert(16, TimeUnit.HOURS); // 16 additional hours for the weekend 

    // 16 non-work hours between two shifts 
    daydiff *= secDiff; 
    daydiff += (weekenddiff * weekendAdditionalSecDiff); 
    long workDiffSeconds = TimeUnit.SECONDS.convert(
      datethen.getTime() - datenow.getTime(), 
      TimeUnit.MILLISECONDS) - daydiff; 
    System.out.println("Difference in working hours is " 
      + workDiffSeconds + " seconds"); 
    System.out.println("Difference in working hours is " 
      + TimeUnit.HOURS.convert(workDiffSeconds, TimeUnit.SECONDS) + " hours"); 
} 

它首先計算你的天之間的天數減去的非數從真正的差異工作時間秒。

對於週末,每天增加8個非工作時間。

+0

謝謝!它完全符合我的要求!你如何去計算前例。週六和週日?不只是5/7 *小時,而是實際檢查? – DagW

+0

我還沒有開始,但我開始之前尋找一個建議..但我在想如果 if(... get(Calendar.DAY_OF_WEEK)== Calendar.SUNDAY) – DagW

+0

嗨!我改編了這個例子來支持週末。它假設datenow frow

0

當我這樣做的時候,我發現最簡單的做法是先開始和結束兩個日期。

然後用秒錶示每一個。

然後通過每個mod和86400(每天秒數)找到每個日期的午夜。

然後從那裏很容易的數字。關鍵是在午夜找到間隔的終點。

0
  1. 使用像喬達時間,但它可以解決沒有)。
  2. 假設day_now < date_then。
    1. 圖的答案day_now(datenow到datenow的午夜)
    2. 圖的答案day_then(前再到datethen當天午夜)
    3. 圖出天之間的數字。
    4. 結合1,2,3
相關問題