我正在尝试编写一个Python脚本,用于计算当月的工作日数。例如,month = August
然后businessDays = 22
。
以下是我发现月份的代码:
def numToMonth( num ):
months = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"]
return str(months[ num - 1 ])
此代码工作正常,我可以硬编码另一个函数来匹配月份与该月份应包含的天数...但这对工作日没有帮助。
有任何帮助吗?我已经习惯了C,C ++,所以请不要抨击我的Python“技能”。
编辑:我无法在我的机器上安装任何额外的库或模块,因此请使用默认的Python模块发布答案。 (Python 2.7,datetime
等。)另外,我的电脑有Windows 7操作系统。
答案 0 :(得分:10)
这是一种冗长的方式,但至少它可以工作,除了标准模块之外不需要任何其他东西。
import datetime
now = datetime.datetime.now()
holidays = {datetime.date(now.year, 8, 14)} # you can add more here
businessdays = 0
for i in range(1, 32):
try:
thisdate = datetime.date(now.year, now.month, i)
except(ValueError):
break
if thisdate.weekday() < 5 and thisdate not in holidays: # Monday == 0, Sunday == 6
businessdays += 1
print businessdays
答案 1 :(得分:7)
我只想使用内置模块calendar:
import calendar
weekday_count = 0
cal = calendar.Calendar()
for week in cal.monthdayscalendar(2013, 8):
for i, day in enumerate(week):
# not this month's day or a weekend
if day == 0 or i >= 5:
continue
# or some other control if desired...
weekday_count += 1
print weekday_count
就是这样。
答案 2 :(得分:2)
我想补充一下我的答案。
我使用日历,列表理解和长度来计算特定月份的工作日天数。
这是我的代码:
#!/bin/env python
import calendar
import datetime
now = datetime.datetime.now()
cal = calendar.Calendar()
working_days = len([x for x in cal.itermonthdays2(now.year, now.month) if x[0] !=0 and x[1] < 5])
print "Total working days this month: " + str(working_days)
答案 3 :(得分:0)
更新: OP无法使用任何外部库。然后,您将必须基于determining the day of the week from the calendar构建一些表。
公式为d + m + y + y / 4 +(c mod 7),其中:d是月中的某天, m是月份表中的月份数, y是年份的最后两位数字,和 c是世纪数。
这很乏味但并非不可能!
ORIG回答:自己编码非常繁琐,因为2013年8月1日和2012年8月1日不一定是一周的同一天。我将从python中的'date'类开始(详细信息here
from datetime import date
datetime.date(2002, 3, 11)
t = d.timetuple()
for i in t:
print i
特别要查看'datetime.weekday()'函数。
答案 4 :(得分:0)
这相对简单,只需分解为步骤:
结合这些步骤,您将拥有一种工作方法。
答案 5 :(得分:0)
您可以查看datetime.datetime.dayofweek()
,但如果您不允许使用外部库,则需要: