Dada una fecha en particular, digamos 2011-07-02, ¿cómo puedo encontrar la fecha del próximo lunes (o cualquier día laborable para ese asunto) después de esa fecha?Busque la fecha del primer lunes después de una fecha determinada
Respuesta
import datetime
def next_weekday(d, weekday):
days_ahead = weekday - d.weekday()
if days_ahead <= 0: # Target day already happened this week
days_ahead += 7
return d + datetime.timedelta(days_ahead)
d = datetime.date(2011, 7, 2)
next_monday = next_weekday(d, 0) # 0 = Monday, 1=Tuesday, 2=Wednesday...
print(next_monday)
Trate
>>> dt = datetime(2011, 7, 2)
>>> dt + timedelta(days=(7 - dt.weekday()))
datetime.datetime(2011, 7, 4, 0, 0)
usando, que el próximo Lunes es de 7 días después de que el lunes, 6 días después de un martes, y así sucesivamente, y también utilizando, que datetime
tipo de informes Lunes de Python como 0
, ..., domingo como 6
.
Interesante que - cuando trato de encontrar el próximo domingo después de datetime (2013, 1, 1) con " datetime (2013, 1 , 1) + timedelta (days = (7 - datetime (2013, 1, 1) .weekday())) ", obtengo" datetime.datetime (2013, 1, 7, 0, 0) ", que es un lunes . – fixxxer
@fixxxer - Como se dice en la respuesta: el código usa algunas propiedades de la API 'datetime' en formas que solo funcionarán si está buscando los lunes. El código proporcionado por 'phihag' es más general y puede encontrar cualquier día de la semana. – Dirk
¿Crees que usar 6 en vez de 7 en timedelta te ayudará? – fixxxer
Puede comenzar a agregar objetos de un día a la fecha y detener cuando sea lunes.
>>> d = datetime.date(2011, 7, 2)
>>> while d.weekday() != 0: #0 for monday
... d += datetime.timedelta(days=1)
...
>>> d
datetime.date(2011, 7, 4)
Esto le dará a la primera el próximo lunes después de la fecha dada:
import datetime
def get_next_monday(year, month, day):
date0 = datetime.date(year, month, day)
next_monday = date0 + datetime.timedelta(7 - date0.weekday() or 7)
return next_monday
print get_next_monday(2011, 7, 2)
print get_next_monday(2015, 8, 31)
print get_next_monday(2015, 9, 1)
2011-07-04
2015-09-07
2015-09-07
a través de la lista ¿comprensión?
from datetime import *
[datetime.today()+timedelta(days=x) for x in range(0,7) if (datetime.today()+timedelta(days=x)).weekday() % 7 == 0]
(0 at the end is for next monday, returns current date when run on monday)
weekday = 0 ## Monday
dt = datetime.datetime.now().replace(hour=0, minute=0, second=0) ## or any specific date
days_remaining = (weekday - dt.weekday() - 1) % 7 + 1
next_dt = dt + datetime.timedelta(days_remaining)
Aquí es una alternativa breve y genérica, a las respuestas poco de peso encima.
# Returns the date of the next given weekday after
# the given date. For example, the date of next Monday.
onDay = lambda date, day: date + datetime.timedelta(days=(day-date.weekday()+7)%7)
Esta respuesta llegó demasiado tarde para reunir votos, pero es mi favorita. – ASalazar
Extremadamente limpio, tienes mi voto. – Liquidgenius
Otra solución elegante simple es usar compensaciones de pandas.
Me resulta muy útil y robusto cuando juego con las fechas.
- Si desea el primer domingo, simplemente modifique la frecuencia a freq = 'W-SUN'.
- Si quiere un par de los próximos domingos, cambie las compensaciones.Día (días).
- El uso de compensaciones de pandas le permite ignorar las vacaciones, trabajar solo con días hábiles y más.
También puede aplicar este método fácilmente en un DataFrame completo usando el método apply.
# Getting the closest monday from a given date
closest_monday = pd.date_range(start=date, end=date + offsets.Day(6), freq='W-MON')[0]
# Adding a 'ClosestMonday' column with the closest monday for each row in a pandas df using apply
# Require you to have a 'Date' column in your df
def get_closest_monday(row):
return pd.date_range(start=row.Date, end=row.Date + offsets.Day(6), freq='W-MON')[0]
df['ClosestMonday'] = df.apply(lambda row: get_closest_monday(row), axis=1)
import datetime
d = datetime.date(2011, 7, 2)
while d.weekday() != 0:
d += datetime.timedelta(1)
- 1. ¿Obtener la fecha del primer lunes de la semana?
- 2. En Perl, ¿cómo encontrar la fecha del lunes anterior para una fecha determinada?
- 3. T-sql Lunes antes de la fecha
- 4. Buscar la fecha del lunes con Python
- 5. Recuperar la fecha del lunes de la semana actual
- 6. ¿Cómo encontrar el primer día de la semana a la que pertenece una fecha determinada?
- 7. Get mes de una determinada fecha
- 8. La mejor manera de eliminar una instancia de modelo django después de una fecha determinada
- 9. Compruebe si una fecha determinada es anterior
- 10. Cómo buscar la cuarta parte de una fecha determinada
- 11. Rails Fecha después de
- 12. NSDate devuelve una fecha incorrecta el primer día del mes
- 13. ¿Cómo determinar la fecha un día antes de una fecha determinada en Java?
- 14. Lista de archivos después de una fecha
- 15. ¿Cómo encontrar qué día de la semana para una fecha determinada utilizando cacao
- 16. ¿Cómo puedo encontrar una fecha que sea tres días antes de una fecha determinada en Perl?
- 17. código Ruby para obtener la fecha del próximo lunes (o cualquier día de la semana)
- 18. ¿Cómo puedo determinar si una fecha determinada es el N ° día entre semana del mes?
- 19. NSDateFormatter dateFromString no va a analizar una cadena determinada fecha
- 20. Eliminación de registros antes de una fecha determinada
- 21. Anterior fecha lunes y anteriores domingos basado en Fecha de hoy
- 22. Lista de archivos modificados desde una fecha determinada utilizando SVN
- 23. ¿Obtiene todos los archivos de VSS para una fecha determinada?
- 24. Obtener la fecha del lunes en la semana actual en PHP 4
- 25. Mostrar modificación (archivos nuevos y editados) desde una fecha determinada
- 26. Fecha del campo de fecha del Solr frente a la fecha?
- 27. Establecer la fecha predeterminada del selector de fecha WPF en la fecha actual
- 28. Obtenga la fecha de inicio y la fecha de finalización de la semana actual (inicio de la semana del lunes y finaliza el domingo)
- 29. Calcular la fecha de inicio y el nombre de un trimestre a partir de una fecha determinada
- 30. sólo una expresión para obtener la fecha de ayer y el primer día del mes
http://docs.python.org/library/datetime.html#datetime.date.weekday –