与Find day difference between two dates (excluding weekend days)相同的问题,但它是用于JavaScript。如何在Python中做到这一点?在Python中查找两个日期时间(不包括周末天数)之间的日差?
5
A
回答
7
import scikits.timeseries as ts
import datetime
a = datetime.datetime(2011,8,1)
b = datetime.datetime(2011,8,29)
diff_business_days = ts.Date('B', b) - ts.Date('B', a)
# returns 20
或dateutil:
import datetime
from dateutil import rrule
a = datetime.datetime(2011,8,1)
b = datetime.datetime(2011,8,29)
diff_business_days = len(list(rrule.rrule(rrule.DAILY,
dtstart=a,
until=b - datetime.timedelta(days=1),
byweekday=(rrule.MO, rrule.TU, rrule.WE, rrule.TH, rrule.FR))))
个scikits.timeseries看depricated:http://pytseries.sourceforge.net/
随着熊猫,而不是一个人可以这样做:
import pandas as pd
a = datetime.datetime(2015, 10, 1)
b = datetime.datetime(2015, 10, 29)
diff_calendar_days = pd.date_range(a, b).size
diff_business_days = pd.bdate_range(a, b).size
1
不知道这是最好的解决方案,但它为我工作:
from datetime import datetime, timedelta
startDate = datetime(2011, 7, 7)
endDate = datetime(2011, 10, 7)
dayDelta = timedelta(days=1)
diff = 0
while startDate != endDate:
if startDate.weekday() not in [5,6]:
diff += 1
startDate += dayDelta
+2
或者减去2 *(天数// 7),然后调整一周中开始和结束日期的位置,如果您希望更快一些。 – agf
2
这里是一个O(1)复杂级解决方案,仅使用内置Python库。
无论时间间隔长度如何,它都具有恒定的性能,并且不关心参数顺序。
#
# by default, the last date is not inclusive
#
def workdaycount(first, second, inc = 0):
if first == second:
return 0
import math
if first > second:
first, second = second, first
if inc:
from datetime import timedelta
second += timedelta(days=1)
interval = (second - first).days
weekspan = int(math.ceil(interval/7.0))
if interval % 7 == 0:
return interval - weekspan * 2
else:
wdf = first.weekday()
if (wdf < 6) and ((interval + wdf) // 7 == weekspan):
modifier = 0
elif (wdf == 6) or ((interval + wdf + 1) // 7 == weekspan):
modifier = 1
else:
modifier = 2
return interval - (2 * weekspan - modifier)
#
# sample usage
#
print workdaycount(date(2011, 8, 15), date(2011, 8, 22)) # returns 5
print workdaycount(date(2011, 8, 15), date(2011, 8, 22), 1) # last date inclusive, returns 6
相关问题
- 1. 获取天数两个日期之间不包括周末
- 2. SQL - 查找两个日期之间的工作时间(不包括周末)
- 3. 不包括日期时间的周末
- 4. 两个日期之间的计数天数,不包括周末(仅限MySQL)
- 5. Sql计算两个日期之间的天数,不包括周末和假日表中的日期
- 6. 获取的时间差不包括在SQL Server周五两个日期之间
- 7. 计算两个日期之间的小时数 - 不包括周末
- 8. 如何在Unix中找到两个日期时间(周末天数除外)之间的差异?
- 9. 添加营业时间为日期/时间,不包括周末
- 10. 两个日期之间的天差
- 11. 计算日期给出两个日期不包括周末
- 12. excel中两个日期之间的差异仅包括假期
- 13. 如何计算JAVA中两个不同日期之间的工作(不包括周末)天数?
- 14. 计算两个日期之间不包括星期日的天数
- 15. 查找excel中两个日期/时间之间的天数和时间
- 16. 在javascript中找到两个日期时间之间的差异
- 17. 在两个日期(日期时间)之间的差异
- 18. 获取Oracle中两个日期之间的天数,包括日期
- 19. 日期时间和日期格式之间的差异天数
- 20. Python - 排除两个日期之间的周末
- 21. 我想计算两个日期之间的天数差异,不包括周末,在某些情况下两个日期都为NULL
- 22. 计算两个NSDates之间的商务日和周末天数
- 23. 两个日期之间的差异python
- 24. datepicker禁用日期基于时间(不包括周末)
- 25. 添加秒到蟒蛇日期时间,不包括周末
- 26. 如何计算除周末之外的两个日期之间的天数java
- 27. 计算sql server中两个日期之间的工作时间(不包括周末)
- 28. 周末,假期计数两个日期之间没有迭代
- 29. 选择日期+ 3天,不包括周末和节假日
- 30. 两个日期之间的时差
此问题似乎是要求将一种语言源代码转换为另一种语言源代码。 – Arafangion