使用Python计算一个月的工作日数?

时间:2013-08-14 13:29:20

标签: python date

我正在尝试编写一个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操作系统。

6 个答案:

答案 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)

这相对简单,只需分解为步骤:

  1. 你需要能够在一个月内完成这些日子。
  2. 您需要能够确定任何给定日期所在的星期几。 Wikipedia列出了一些方法。
  3. 那么您只需要将一周中的标志日作为工作日。
  4. 结合这些步骤,您将拥有一种工作方法。

答案 5 :(得分:0)

您可以查看datetime.datetime.dayofweek(),但如果您不允许使用外部库,则需要:

  1. 选择一个你知道星期几的日期 - 如果是的话,最好 星期一
  2. 提出了自那以后的天数公式 一个月的第一个是。
  3. 该月的每一天(自您的日期以来的天数) 那天[5,6]中的%7是一个周末。