¿Ofrece python una forma de obtener fácilmente la semana actual del mes (1: 4)?python - Número de semana del mes
Respuesta
Para utilizar división consecutivo, el día del mes de la fecha que está viendo las necesidades que se ajusta de acuerdo con la posición (dentro de la semana) del primer día del mes. Entonces, si su mes comienza el lunes (el primer día de la semana), puede hacer la división como se sugiere arriba. Sin embargo, si el mes comienza el miércoles, querrá agregar 2 y luego hacer la división. Todo esto está encapsulado en la función a continuación.
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 para la semana que comienza el domingo –
Funciona muy bien. Gracias. – crazyDiamond
Si su primera semana comienza el primer día del mes se puede utilizar la división entera:
import datetime day_of_month = datetime.datetime.now().day week_number = (day_of_month - 1) // 7 + 1
tal vez datetime.datetime.now(). Day daría el día de hoy en el mes – aeter
@aeter: De hecho. Adicional. –
Gracias. Resulta que no se trataba de Python después de todo, sino de aritmética :) –
Salida del pitón calendar módulo
Gracias. Sabía sobre calendar y dateutil, pero ambos no me ayudaron en eso. –
vito tiene la respuesta correcta. Utilicé: 'st, end = calendar.monthrange (2012, 6)', 'days = range (st, end + 1)', 'week_days = [days [i: i + 7] para i en rango (0, len (días), 7)] ' – Droogans
he encontrado una manera bastante simple:
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
devuelve 0 si la primera semana
' isocalendar() 'puede devolver 53 para el 1 de enero. Su implementación devuelve -52 para' weekOfMonth (2010, 1, 8) '. –
Arreglé el código con una verificación de ese error, y el código no es tan grande y hace el trabajo a la perfección. –
Devoluciones -47 para Fechas: 2012-12-31, 2013-12-30, 2013-12-31 –
por favor enlace a Python: Number of the Week in a Month
todo depende de cuando la primera lunes del mes es
Esta versión podría ser mejorado, sino como un primer vistazo en los módulos de Python (fecha y hora y el calendario), que hacen de esta solución, espero que podría ser útil:
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
Sé que esto es años de edad , pero pasé mucho tiempo tratando de encontrar esta respuesta. Hice mi propio método y pensé que debería compartirlo.
El módulo de calendario tiene un método monthcalendar que devuelve una matriz 2D donde cada fila representa una semana. Por ejemplo:
import calendar
calendar.monthcalendar(2015,9)
resultado:
[[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]]
Así numpy es donde está tu amigo aquí. Y estoy en EE.UU., así que quiero la semana para iniciar el domingo y la primera semana a etiquetar 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)
vuelve
3
Esto debe hacerlo.
#! /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 respuesta de Josh debe ajustarse ligeramente para acomodar el primer día de un domingo.
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))
respuesta Josh' parece la mejor, pero creo que debemos tener en cuenta el hecho de que una semana es de un mes sólo si su Jueves cae en ese mes. Al menos eso es what the iso says.
Según ese estándar, un mes puede tener hasta 5 semanas.Un día podría pertenecer a un mes, pero la semana a la que pertenece no puede.
he tenido en cuenta que sólo mediante la adición de un simple
if (first_day.weekday()>3) :
return ret_val-1
else:
return ret_val
donde ret_val es exactamente valor calculado de Josh. Probado en junio de 2017 (tiene 5 semanas) y en septiembre de 2017. Pasar '2017-09-01' devuelve 0 porque ese día pertenece a una semana que no pertenece a septiembre.
La forma más correcta sería que el método devuelva tanto el número de la semana como el nombre del mes al que pertenece el día de la entrada.
- 1. TSQL Calcular el número de semana del mes
- 2. Calcula la semana del mes en .NET
- 3. ¿Cómo obtengo el número de mes del año y el número de semana en C#?
- 4. Cómo encontrar la semana del mes
- 5. Obtener el nombre Mes del número del mes
- 6. calcule el mes del año y el número de semana en excel
- 7. obtener enésimo día de la semana del mes en C#
- 8. Función para la semana del mes en mysql
- 9. convertir mes del nombre al número
- 10. Agrupación por semana/mes/etc. y ActiveRecord?
- 11. ¿Cómo encontrar el número de días del mes en curso
- 12. nombre de mes a número de mes y viceversa en python
- 13. ¿Cómo obtener el número de semana en Python?
- 14. iphone ¿cómo puedo obtener el nombre del mes a partir del número de mes?
- 15. Calcule el último día de la semana de un mes
- 16. Grupo de semana del año (Número de la semana) en LINQ to SQL
- 17. Convertir número de mes a mes nombre corto
- 18. Obtener el nombre del mes del número en PostgreSQL
- 19. Hallazgo de la semana, el mes y el año
- 20. Número de semana de un año en dateformat
- 21. Marca de tiempo Python del día, mes, año
- 22. ¿Cómo puedo determinar si una fecha determinada es el N ° día entre semana del mes?
- 23. Calcular días del mes
- 24. Rieles: obtenga las fechas de inicio y finalización de la semana actual y del mes
- 25. Usando Python 2.6 ¿cómo obtengo el día del mes como un número entero?
- 26. ¿Cómo mostrar el nombre del mes por número?
- 27. Convertir el nombre del mes en el número
- 28. Convertir mes número a mes Nombre Función en SQL
- 29. Número de p. Ej. Los lunes quedan en el mes
- 30. Rails número de semanas en el mes
Cuando llegue al día 29, en realidad se encuentra en la quinta semana, ¿verdad? – erikbwork
¿Comienza una semana el primer día del mes o siempre los lunes? O siempre el domingo? O ...? –
"semana del mes" no es exactamente un concepto comúnmente utilizado. Debe indicarnos cuál es su definición, con ejemplos, de "semana del mes" ... en particular, semana de CUAL el mes, p. La semana comienza el lunes, supongamos que hoy es domingo y el primer día del mes: ¿desea (mes anterior, semana 5) o (mes actual, semana -1 o 0) o alguna otra cosa? –