【发布时间】:2010-10-27 09:14:04
【问题描述】:
给定一个日期范围,如何计算部分或全部在该范围内的周末数?
(根据要求提供一些定义: 取“周末”来表示周六和周日。 日期范围包括在内,即结束日期是范围的一部分 “全部或部分”表示周末在日期范围内的任何部分都意味着整个周末都被计算在内。)
为简化起见,我想您实际上只需要知道持续时间以及初始日期是一周中的哪一天...
我现在很好,这将涉及到对整数除以 7 和一些逻辑来根据余数加 1,但我不太清楚是什么...
Python 答案加分 ;-)
编辑
这是我的最终代码。
周末是周五和周六(因为我们计算了住宿的夜数),从周一开始,天数为 0。我使用了 onebyone 的算法和 Tom 的代码布局。非常感谢各位。
def calc_weekends(start_day, duration):
days_until_weekend = [5, 4, 3, 2, 1, 1, 6]
adjusted_duration = duration - days_until_weekend[start_day]
if adjusted_duration < 0:
weekends = 0
else:
weekends = (adjusted_duration/7)+1
if start_day == 5 and duration % 7 == 0: #Saturday to Saturday is an exception
weekends += 1
return weekends
if __name__ == "__main__":
days = ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
for start_day in range(0,7):
for duration in range(1,16):
print "%s to %s (%s days): %s weekends" % (days[start_day], days[(start_day+duration) % 7], duration, calc_weekends(start_day, duration))
print
【问题讨论】:
-
首先定义“星期”。严重地。它从哪一天开始?你是四舍五入到下一个整周还是截断到前一个整周?您是从匹配日(周三到周三)开始,还是忽略小数周并从周日到周日(或周一到周一)?
-
周末数是否意味着日期范围内的周六和/或周日数?
-
S.Lott - 数周不涉及。你有一系列的日子。如果周末(如果您愿意,定义为周六和周日)部分或全部在该期间,那么它很重要。除了定义周末之外,如果您仔细阅读,原始问题中的所有内容都会清楚地说明。
-
抱歉,不清楚。如果范围从星期日开始到下一个星期六结束,是 0、1 还是 2 个周末?
-
@andybak:这是我的观点。这个问题有一些小的逻辑漏洞。 “通常暗示”和“大多数人解释”不会堵住漏洞。在日历计算的情况下,细节非常重要。请使用详细信息更新问题,以便有类似问题的其他人可以从您的问题中受益。
标签: python date date-arithmetic