9

Pythonで今月の日曜日の数を取得するにはどうすればよいですか?

誰かがこれについて何か考えを持っていますか?

4

8 に答える 8

7

これにより、現在の月の日曜日の日数が希望どおりに表示されます。

import calendar
from datetime import datetime

In [367]: len([1 for i in calendar.monthcalendar(datetime.now().year,
                                  datetime.now().month) if i[6] != 0])
Out[367]: 4
于 2012-10-19T12:08:56.017 に答える
7

私はたまたまこれに対する解決策を必要としていましたが、ここでの解決策に満足できなかったので、私は自分自身を思いつきました:

import calendar

year = 2016
month = 3
day_to_count = calendar.SUNDAY

matrix = calendar.monthcalendar(year,month)

num_days = sum(1 for x in matrix if x[day_to_count] != 0)
于 2016-04-04T10:48:56.697 に答える
4

私はこのようにします:

import datetime

today = datetime.date.today()
day = datetime.date(today.year, today.month, 1)
single_day = datetime.timedelta(days=1)

sundays = 0
while day.month == today.month:
    if day.weekday() == 6:
        sundays += 1
    day += single_day

print 'Sundays:', sundays
于 2012-10-19T12:02:00.403 に答える
4

私の見解:(適切な月にいることなどを心配する必要がなくなります...)

from calendar import weekday, monthrange, SUNDAY

y, m = 2012, 10

days = [weekday(y, m, d+1) for d in range(*monthrange(y, m))]
print days.count(SUNDAY)

または、@ mgilsonが指摘しているように、list-compを廃止して、すべてをジェネレーターとしてまとめることができます。

sum(1 for d in range(*monthrange(y,m)) if weekday(y,m,d+1)==SUNDAY)

そして、私はあなたが投げることができると思います:

from collections import Counter
days = Counter(weekday(y, m, d + 1) for d in range(*monthrange(y, m)))
print days[SUNDAY]
于 2012-10-19T12:26:32.333 に答える
1

calendarとを使用した別の例datetime

import datetime
import calendar
today = datetime.date.today()
m = today.month
y = today.year
sum(1 for week in calendar.monthcalendar(y,m) if week[-1])

おそらく、それを行うための少し速い方法は次のようになります。

first_day,month_len = monthrange(y,m)
date_of_first_sun = 1+6-first_day
print sum(1 for x in range(date_of_first_sun,month_len+1,7))
于 2012-10-19T12:11:04.897 に答える
0

これは、ISOの週番号を使用して行うことができます。

from datetime import date
bom = date.today().replace(day=1)                 # first day of current month
eom = (date(bom.year, 12, 31) if bom.month == 12 else
       (bom.replace(month=bom.month + 1) - 1))    # last day of current month
_, b_week, _ = bom.isocalendar()
_, e_week, e_weekday = eom.isocalendar()
num_sundays = (e_week - b_week) + (1 if e_weekday == 7 else 0)

一般に、特定の曜日(1 =月曜日、7 =日曜日)の計算は次のとおりです。

num_days = ((e_week - b_week) +
            (-1 if b_weekday > day else 0) +
            ( 1 if e_weekday >= day else 0))
于 2012-10-19T12:04:26.800 に答える
0
import calendar

MONTH = 10    
sundays = 0
cal = calendar.Calendar()

for day in cal.itermonthdates(2012, MONTH):
    if day.weekday() == 6 and day.month == MONTH:
        sundays += 1

注意を払ってください:Calendar.itermonthdatesのドキュメントは次のとおりです。

イテレータを1か月間返却します。イテレータはdatetime.date値を生成し、常に完全な週を反復処理するため、指定された月以外の日付を生成します。

だからday.month == MONTH必要です

平日を0〜6の範囲にしday.weekday()たい場合は、を使用します。平日を1〜7の範囲にしたい場合は、を使用します。day.isoweekday()

于 2012-10-19T12:06:38.047 に答える
0

私の解決策。

以下は@Lingsonの回答に触発されたものですが、ループは少ないと思います。

import calendar

def get_number_of_weekdays(year: int, month: int) -> list:
    main_calendar = calendar.monthcalendar(year, month)
    number_of_weeks = len(main_calendar)
    number_of_weekdays = []

    for i in range(7):
        number_of_weekday = number_of_weeks

        if main_calendar[0][i] == 0:
            number_of_weekday -= 1
        
        if main_calendar[-1][i] == 0:
            number_of_weekday -= 1

        number_of_weekdays.append(number_of_weekday)

    return sum(number_of_weekdays)  # In my application I needed the number of each weekday, so you could return just the list to do that.
于 2022-01-24T20:44:36.107 に答える