我需要得到兩個日期之間的秒數,並且只在工作時間(例如0800-1600)之間。 關於如何在Java中做到這一點的任何建議?兩個日期之間的秒數,限於可變工作時間
long seconds = ((datenow.getTime() - datethen.getTime())/1000);
我需要得到兩個日期之間的秒數,並且只在工作時間(例如0800-1600)之間。 關於如何在Java中做到這一點的任何建議?兩個日期之間的秒數,限於可變工作時間
long seconds = ((datenow.getTime() - datethen.getTime())/1000);
你可以使用這樣的事情:
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個非工作時間。
當我這樣做的時候,我發現最簡單的做法是先開始和結束兩個日期。
然後用秒錶示每一個。
然後通過每個mod和86400(每天秒數)找到每個日期的午夜。
然後從那裏很容易的數字。關鍵是在午夜找到間隔的終點。
謝謝!它完全符合我的要求!你如何去計算前例。週六和週日?不只是5/7 *小時,而是實際檢查? – DagW
我還沒有開始,但我開始之前尋找一個建議..但我在想如果 if(... get(Calendar.DAY_OF_WEEK)== Calendar.SUNDAY) – DagW
嗨!我改編了這個例子來支持週末。它假設datenow
frow