我有一個要求,以獲得自創建日期以來經過的天數。這個數字需要減去週末。我只有一些功能:JulianDay,JulianWeek,JulianYear獲取Julian日期值,我也有Today返回今天的日期,它返回日期和時間的時間戳。我已經設法通過使用:JulianDay(今天) - JulianDay(創建日期),但我仍然無法用頭圍繞減去週末計算總天數減週末
計算總天數減週末
回答
此代碼應該做你想要的:
Date fromDate = new Date(System.currentTimeMillis()-(30L*24*60*60*1000)); // 30 days ago
Date toDate = new Date(System.currentTimeMillis()); // now
Calendar cal = Calendar.getInstance();
cal.setTime(fromDate);
int countDays = 0;
while (toDate.compareTo(cal.getTime()) > 0) {
if (cal.get(Calendar.DAY_OF_WEEK) != Calendar.SATURDAY && cal.get(Calendar.DAY_OF_WEEK) != Calendar.SUNDAY)
countDays++;
cal.add(Calendar.DATE, 1);
}
System.out.println(countDays);
感謝您的答案,但與此有關的事情,Siebel的是,它是如此有限,我可以做什麼,因爲這個功能是必要的因此,我沒有奢侈的這樣的功能。只有提到的功能是可用的 – eddy
不能完全確定你在你的問題中引用的功能做的,但是,你彷彿是舒服 做基本的日期運算以確定兩個給定日期之間的天數。困難的部分似乎 要弄清楚如何可能幾天減去週末。
我想你可以用兩個函數實現這一點:
- 給定兩個日期,返回它們之間的天數。致電此
DAYS(date-1, date-2)
- 給定一個日期,返回星期幾(其中1 =星期一... 7 =星期日)。調用此
DAY-OF-WEEK(date)
具備這些功能,那麼你可以做到以下幾點:
- 計算全周的日期範圍:
WEEKS = DAYS(date-1, date2) mod 7
- 計算天未全周的部分:
DAYS-LEFT = DAYS(date-1, date-2) - (WEEKS * 7)
- 確定哪一天的最後一天是:
LAST-DAY = DAY-OF-WEEK(date-2)
從局部一週調整的DAYS-LEFT
數量如下:
if DAYS-LEFT > 0 then
case LAST-DAY
when 6 then /* Saturday */
DAYS-LEFT = DAYS-LEFT - 1
when 7 then /* Sunday */
if DAYS-LEFT = 1 then
DAYS-LEFT = 0
else
DAYS-LEFT = DAYS-LEFT - 2
end-if
when other /* Monday through Friday */
case DAYS-LEFT - LAST-DAY
when > 1 then
DAYS-LEFT = DAYS-LEFT - 2
when = 1 then
DAYS-LEFT = DAYS-LEFT - 1
when other
DAYS-LEFT = DAYS-LEFT /* no adjustment */
end-case
end-case
end-if
DAYS-EXCLUDING-WEEKENDS = DAYS(date-1, date-2) - (WEEKS * 2) + DAYS-LEFT
我假設你有,或可以建立,一個DAYS(date-1, date-2)
功能。接下來的一點是確定一個給定的日期所在的星期幾 。執行此操作的算法被稱爲Zeller's congruence。因爲維基百科做了很好的描述,所以我不會在這裏重複這個算法 。
希望這可以讓你對你的方式...
這似乎是一個很好的算法,但我剛發現在我的上下文中,我不能使用%:(這麼多的限制! – eddy
你JulianDay(y,m,d)
函數返回對於每一日期,序列號;假設爲了討論起見,JulianDay(2013,7,4)
返回2456478.第二天將是2456479,然後是2456480,依此類推。假設兩天的差額爲diff。
diff,每個包含5個工作日的整週的數量是diff // 7
(這是整數除法,所以它向下舍入)。因此,如果diff是25,則會有25 // 7 = 3
整週加上額外的diff % 7 = 4
天。 3個整週包含15個工作日;你從哪一天開始就沒有關係。所以你只需要考慮4天額外的日子,看看星期幾可能如何。
JulianDay
函數返回的數字可以以模7爲模來計算星期幾;在我的JulianDay
函數中,模5表示星期六,模6表示星期日。您可以將額外的4天加入期間的開始4天或結束的4天,這並不重要,因爲所有其他日子都是連續的整週的一部分,每週有5個工作日。假設你選擇前4天。然後以第一天模7的JulianDay
,然後第一天的JulianDay
加1模7,然後第一天的JulianDay
加2模7,然後第一天的JulianDay
加3模7確定多少他們是週一至週五的工作日數。
所有你需要的是一個JulianDay
函數。
- 1. 計數天減週末
- 2. MDX:計算排除週末的天數
- 3. 在SQL Server中計算排除週末(週一到週五)的天數
- 4. 計算兩個NSDates之間的商務日和週末天數
- 5. 計算sharepoint2010中不包括週末的天數
- 6. SQL查詢計算天數,不包括假期/週末
- 7. 計算範圍公式之間的週末天數
- 8. 計算陣列中的週末天數記錄
- 9. 計算不包括週末
- 10. Javascript「週末」日期計算?
- 11. php日期函數和計算每週的幾天以確保週末跳過
- 12. 計算天,不算週六和週日
- 13. PHP:從easter_date()中減去天數來計算Ash週三
- 14. 計算年末柱總
- 15. 在沒有周末的情況下在daterangepicker中計算天
- 16. 如何計算SQL的週末?
- 17. 週末的Java API計算器/庫
- 18. 如何計算除週末之外的兩個日期之間的天數java
- 19. 計算sharepoint2010中不包括週末和公共假期的天數
- 20. 日期選擇器 - 計算不包括假期和週末的天數
- 21. 調試計算兩個日期之間的總時間減去週末的函數
- 22. 計數爲下一個非週末(週六,週日),每天給藥一開始日期和天數
- 23. 返回週末天的MySQL函數
- 24. 要計算移動/回滾每週(7天)總和:
- 25. 彙總計算天數各月在SQL
- 26. 計算一年中的總天數
- 27. PHP計算總天數的MySQL通過
- 28. mysql計算缺勤總天數
- 29. SQL Server - 每天自動計算總數
- 30. 計算總天數在specied日期
你正在使用哪種框架/語言?它可能會變得無關緊要,但它可以幫助其他人指出已存在的日期API,並可能在這方面爲您提供幫助。 – Jasarien
我之所以沒有聲明是因爲我正在Siebel上計算的字段上工作,但我也認爲這樣的算法會很有用 – eddy
哦,現在我明白了。 Mi回答是基於你在哪裏使用java的想法。您基本上需要循環查看所有日期,並詢問當前日期是星期日還是星期六,如果是,則增加計數器。 –