web-dev-qa-db-ja.com

python-月の週番号

pythonは、現在の週を簡単に取得する方法を提供しますかその月の(1:4)?

19
Joao Figueiredo

ストレートディビジョンを使用するには、表示している日付の曜日を、月の最初の日の位置(週内)に応じて調整する必要があります。したがって、月が月曜日(週の最初の日)に始まる場合は、上記のように除算を行うことができます。ただし、月が水曜日に始まる場合は、2を加算してから除算を行う必要があります。これはすべて、以下の関数にカプセル化されています。

from math import ceil

def week_of_month(dt):
    """ Returns the week of the month for the specified date.
    """

    first_day = dt.replace(day=1)

    dom = dt.day
    adjusted_dom = dom + first_day.weekday()

    return int(ceil(adjusted_dom/7.0))
29
Josh

最初の週が月の最初の日に始まる場合は、整数除算を使用できます。

 import datetime 
 day_of_month = datetime.datetime.now()。day 
 week_number =(day_of_month-1)// 7 + 1 
10
Mark Byers

私はこれが古いことを知っていますが、私はこの答えを見つけるために多くの時間を費やしました。私は独自の方法を作り、共有すべきだと考えました。

カレンダーモジュールには、各行が週を表す2D配列を返すmonthcalendarメソッドがあります。例えば:

import calendar
calendar.monthcalendar(2015,9)

結果:

[[0,0,1,2,3,4,5],
 [6,7,8,9,10,11,12],
 [13,14,15,16,17,18,19],
 [20,21,22,23,24,25,26],
 [27,28,29,30,0,0,0]]

だから、numpyはここにあなたの友達がいます。そして、私は米国にいるので、週を日曜日に開始し、最初の週に1のラベルを付けたいと思います。

import calendar
import numpy as np
calendar.setfirstweekday(6)

def get_week_of_month(year, month, day):
    x = np.array(calendar.monthcalendar(year, month))
    week_of_month = np.where(x==day)[0][0] + 1
    return(week_of_month)

get_week_of_month(2015,9,14)

戻り値

3
8

python calendar モジュールをチェックしてください

3
vito huang

このバージョンは改善される可能性がありますが、pythonモジュール(日時とカレンダー)を最初に見て、このソリューションを作成します。役立つことを願っています。

from datetime import datetime
n = datetime.now()
#from Django.utils.timezone import now
#n = now() #if you use Django with timezone

from calendar import Calendar
cal = Calendar() # week starts Monday
#cal = Calendar(6) # week stars Sunday

weeks = cal.monthdayscalendar(n.year, n.month)
for x in range(len(weeks)):
    if now.day in weeks[x]:
        print x+1
3

パッケージをチェックしてください ペンデュラム

>>> dt = pendulum.parse('2018-09-30')
>>> dt.week_of_month
5
2
Prateek Dorwal

ジョシュの答えは、日曜日に当たる最初の日を収容するためにわずかに微調整する必要があります。

def get_week_of_month(date):
   first_day = date.replace(day=1)

   day_of_month = date.day

   if(first_day.weekday() == 6):
       adjusted_dom = (1 + first_day.weekday()) / 7
   else:
       adjusted_dom = day_of_month + first_day.weekday()

   return int(ceil(adjusted_dom/7.0))
2
crazyDiamond

私は非常に簡単な方法を見つけました:

import datetime
def week(year, month, day):
    first_week_month = datetime.datetime(year, month, 1).isocalendar()[1]
    if month == 1 and first_week_month > 10:
        first_week_month = 0
    user_date = datetime.datetime(year, month, day).isocalendar()[1]
    if month == 1 and user_date > 10:
        user_date = 0
    return user_date - first_week_month

最初の週の場合は0を返します

Joshの答えは最高のようですが、木曜日がその月に該当する場合にのみ、週が月に属するという事実を考慮に入れる必要があると思います。少なくともそれは isoが言うこと です。

その基準によれば、1か月は最大5週間かかる可能性があります。日は月に属することができますが、それが属する週はそうではない場合があります。

単純なものを追加するだけでそれを考慮に入れました

if (first_day.weekday()>3) :
        return ret_val-1
    else:
        return ret_val

ここで、ret_valは正確にJoshの計算値です。 2017年6月(5週間)と2017年9月にテストされました。「2017-09-01」に合格すると、その日は9月に属さない週に属するため、0が返されます。

最も正しい方法は、入力日が属する週番号と月名の両方をメソッドに返すことです。

1
benelgiac

これでうまくいくはずです。

#! /usr/bin/env python2

import calendar, datetime

#FUNCTIONS
def week_of_month(date):
    """Determines the week (number) of the month"""

    #Calendar object. 6 = Start on Sunday, 0 = Start on Monday
    cal_object = calendar.Calendar(6)
    month_calendar_dates = cal_object.itermonthdates(date.year,date.month)

    day_of_week = 1
    week_number = 1

    for day in month_calendar_dates:
        #add a week and reset day of week
        if day_of_week > 7:
            week_number += 1
            day_of_week = 1

        if date == day:
            break
        else:
            day_of_week += 1

    return week_number


#MAIN
example_date = datetime.date(2015,9,21)

print "Week",str(week_of_month(example_date))
#Returns 'Week 4'
0
dan
def week_of_month(date_value):
 return (date_value.isocalendar()[1] - date_value.replace(day=1).isocalendar()[1] + 1)

date_valueはタイムスタンプ形式である必要がありますこれはすべての場合に完璧な答えを与えます

リンクしてください Python:月の週数

ITはすべて、月の第1月曜日がいつになるかによって異なります。

月の最後の曜日に移動し、7に分割します

from math import ceil

def week_of_month(dt):
    """ Returns the week of the month for the specified date.
    """
    # weekday from monday == 0 ---> sunday == 6
    last_day_of_week_of_month = dt.day + (7 - (1 + dt.weekday()))
    return int(ceil(last_day_of_week_of_month/7.0))
0
Tan Nguyen