Python offre un modo per ottenere facilmente la settimana corrente del mese (1: 4)?python - Numero della settimana del mese
risposta
Per poter utilizzare la divisione dritto, il giorno del mese per la data si sta guardando ha bisogno di essere regolata in base alla posizione (entro la settimana) del primo giorno del mese. Quindi, se il tuo mese inizia a partire da lunedì (il primo giorno della settimana), puoi semplicemente eseguire la divisione come suggerito sopra. Tuttavia, se il mese inizia di mercoledì, dovrai aggiungere 2 e poi fare la divisione. Questo è tutto incapsulato nella funzione seguente.
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))
adjusted_dom = (1 + first_day.weekday())% 7 per settimana a partire da domenica –
Funziona davvero bene. Grazie. – crazyDiamond
Se la vostra prima settimana inizia il primo giorno del mese è possibile utilizzare divisione intera:
import datetime day_of_month = datetime.datetime.now().day week_number = (day_of_month - 1) // 7 + 1
forse datetime.datetime.now(). Giorno darebbe il giorno di oggi nel mese – aeter
@aeter: Infatti. Aggiunto. –
Grazie. Alla fine non si trattava di Python, ma di aritmetica :) –
Partenza il pitone calendar modulo
Grazie. Sapevo di calendario e datautil, ma entrambi non mi hanno aiutato in questo. –
vito ha la risposta giusta. Ho usato: 'st, end = calendar.monthrange (2012, 6)', 'days = range (st, end + 1)', 'week_days = [giorni [i: i + 7] per i in range (0, len (days), 7)] ' – Droogans
ho trovato un modo molto semplice:
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
restituisce 0 se prima settimana
' isocalendar() 'può restituire 53 per il 1 gennaio. L'implementazione restituisce -52 per' weekOfMonth (2010, 1, 8) '. –
Ho corretto il codice con un controllo per quell'errore, e il codice non è diventato così grande e funziona perfettamente. –
Restituzioni -47 per le date: 2012-12-31, 2013-12-30, 2013-12-31 –
per favore link alla Python: Number of the Week in a Month
tutto dipende da quando il primo lunedi del mese è
Questa versione potrebbe essere migliorata, ma come un primo sguardo a moduli Python (datetime e calendario), io faccio questa soluzione, spero che potrebbe essere utile:
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
So che questo è anni , ma ho passato un sacco di tempo a cercare di trovare questa risposta. Ho fatto il mio metodo e ho pensato di doverlo condividere.
Il modulo del calendario ha un metodo monthcalendar che restituisce un array 2D in cui ogni riga rappresenta una settimana. Per esempio:
import calendar
calendar.monthcalendar(2015,9)
risultato:
[[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]]
Quindi NumPy Ecco dove è tuo amico qui. E sono in USA così voglio settimana per iniziare la Domenica e la prima settimana da etichettare 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)
rendimenti
3
Questo dovrebbe farlo.
#! /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'
La risposta di Josh deve essere modificata leggermente per soddisfare il primo giorno che cade di domenica.
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))
risposta Josh' sembra il migliore, ma penso che dovremmo prendere in considerazione il fatto che una settimana appartiene a un mese solo se il suo Giovedi cade in quel mese. Almeno questo è what the iso says.
Secondo questo standard, un mese può avere fino a 5 settimane.Un giorno potrebbe appartenere a un mese, ma è possibile che la settimana appartenga a.
ho preso in considerazione che solo con l'aggiunta di un semplice
if (first_day.weekday()>3) :
return ret_val-1
else:
return ret_val
dove RET_VAL è esattamente il valore calcolato di Josh. Testato a giugno 2017 (ha 5 settimane) e a settembre 2017. Il passaggio '2017-09-01' restituisce 0 perché quel giorno appartiene a una settimana che non appartiene a settembre.
Il modo più corretto sarebbe quello di restituire il metodo sia il numero della settimana sia il nome del mese a cui appartiene il giorno di immissione.
- 1. Calcolare la settimana del mese in .NET
- 2. R Trova l'ultimo giorno della settimana del mese
- 3. Come trovare la settimana del mese
- 4. Ottieni mese per settimana, giorno e anno
- 5. ottenere giorno della settimana n-esima di mese in C#
- 6. VB.NET DatetimePicker - Numero della settimana errato
- 7. Ottieni il numero del mese dal nome del mese
- 8. Filtraggio del queryset Django secondo il numero ISO della settimana
- 9. Formula di Excel per ottenere il numero della settimana nel mese (con lunedì)
- 10. Php - ottenere scorsa numero della settimana nell'anno
- 11. Ottieni il numero della settimana nell'SDK iOS
- 12. Raggruppamento per settimana/mese/etc e ActiveRecord?
- 13. Funzione per la settimana del mese in mysql
- 14. Ottieni la settimana del mese con Joda-Time
- 15. Rails - Ricevi le date di inizio e fine della settimana e del mese corrente
- 16. Determinare in quale giorno della settimana è ogni data del mese
- 17. Trovare Primo giorno della settimana tramite PHP
- 18. sbagliato numero della settimana utilizzando DATEPART in SQL Server
- 19. Trovare la data per un dato numero della settimana
- 20. Ottieni la data del giorno specifico della settimana in JavaScript
- 21. Vb.net come nome del giorno della settimana
- 22. Converti numero di mese in mese in nome breve
- 23. Formula semplice per determinare la data utilizzando la settimana del mese?
- 24. Numero di conteggi nel mese corrente
- 25. Query ultimo giorno, la settimana scorsa, il mese scorso SQLite
- 26. Funzione Ottenere il numero dell'anno della settimana giusta
- 27. Java: ottieni il numero della settimana da qualsiasi data?
- 28. Come convertire il numero della settimana in data?
- 29. Ottenere date da un numero della settimana in T-SQL
- 30. Prendi il numero della settimana da una certa data
Quando raggiungi il 29, sei effettivamente nella quinta settimana, giusto? – erikbwork
La settimana inizia il primo giorno del mese o sempre il lunedì? O sempre di domenica? O... ? –
"settimana del mese" non è esattamente un concetto comunemente usato. Devi dirci qual è la tua definizione, con esempi, di "settimana del mese" ... in particolare, settimana del WHICH, ad es. la settimana inizia lunedì, supponiamo che oggi sia la domenica e il primo giorno del mese: vuoi (mese precedente, settimana 5) o (mese corrente, settimana -1 o 0) o qualcos'altro? –