Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

337
Views
Python generando una lista de fechas entre dos fechas

Quiero generar una lista de fechas entre dos fechas y almacenarlas en una lista en formato de cadena. Esta lista es útil para comparar con otras fechas que tengo.

Mi código se da a continuación:

 from datetime import date, timedelta sdate = date(2019,3,22) # start date edate = date(2019,4,9) # end date def dates_bwn_twodates(start_date, end_date): for n in range(int ((end_date - start_date).days)): yield start_date + timedelta(n) print(dates_bwn_twodates(sdate,edate))

Mi salida actual:

 <generator object dates_bwn_twodates at 0x000002A8E7929410>

Mi salida esperada:

 ['2019-03-22',.....,'2019-04-08']

Algo está mal en mi código.

over 4 years ago · Santiago Trujillo
7 answers
Answer question

0

Debería convertirlo en una lista con cadenas explícitamente:

 print([str(d) for d in dates_bwn_twodates(sdate,edate)])
over 4 years ago · Santiago Trujillo Report

0

Puedes usar pandas.date_range() para esto:

 import pandas pandas.date_range(sdate,edate-timedelta(days=1),freq='d')

 DatetimeIndex(['2019-03-22', '2019-03-23', '2019-03-24', '2019-03-25', '2019-03-26', '2019-03-27', '2019-03-28', '2019-03-29', '2019-03-30', '2019-03-31', '2019-04-01', '2019-04-02', '2019-04-03', '2019-04-04', '2019-04-05', '2019-04-06', '2019-04-07', '2019-04-08'], dtype='datetime64[ns]', freq='D')
over 4 years ago · Santiago Trujillo Report

0

from datetime import date, timedelta sdate = date(2019,3,22) # start date edate = date(2019,4,9) # end date date_modified=sdate list=[sdate] while date_modified<edate: date_modified+=timedelta(days=nbDaysbtw2dates) list.append(date_modified) print(list)
over 4 years ago · Santiago Trujillo Report

0

Puede usar la biblioteca de momentos de https://github.com/zachwill/moment.git para hacer su vida más fácil.

 import moment def dates_bwn_twodates(start_date, end_date): diff = abs(start_date.diff(end_date).days) for n in range(0,diff+1): yield start_date.strftime("%Y-%m-%d") start_date = (start_date).add(days=1) sdate = moment.date('2019-03-22') #start date edate = moment.date('2019-04-09') #end date

y luego tienes opciones

 dates = list(dates_bwn_twodates(sdate,edate)) #dates as a list

o puedes iterar

 for date in dates_bwn_twodates(sdate,edate): #do something with each date
over 4 years ago · Santiago Trujillo Report

0

Su código reescrito como una lista de comprensión:

 [sdate+timedelta(days=x) for x in range((edate-sdate).days)]

resultados:

 [datetime.date(2019, 3, 22), datetime.date(2019, 3, 23), datetime.date(2019, 3, 24), : datetime.date(2019, 4, 7), datetime.date(2019, 4, 8)]
over 4 years ago · Santiago Trujillo Report

0

Me sorprende que esta no sea una función estándar en el paquete de fecha y hora.

Aquí hay una función que hace lo que se solicita:

 from datetime import timedelta def date_range_list(start_date, end_date): # Return list of datetime.date objects between start_date and end_date (inclusive). date_list = [] curr_date = start_date while curr_date <= end_date: date_list.append(curr_date) curr_date += timedelta(days=1) return date_list

Uso:

 from datetime import date, timedelta def date_range_list(start_date, end_date): # Return list of datetime.date objects between start_date and end_date (inclusive). date_list = [] curr_date = start_date while curr_date <= end_date: date_list.append(curr_date) curr_date += timedelta(days=1) return date_list start_date = datetime.date(year=2021, month=12, day=20) stop_date = datetime.date(year=2021, month=12, day=25) date_list = date_range_list(start_date, stop_date) date_list

Producción:

 [datetime.date(2021, 12, 20), datetime.date(2021, 12, 21), datetime.date(2021, 12, 22), datetime.date(2021, 12, 23), datetime.date(2021, 12, 24), datetime.date(2021, 12, 25)]
over 4 years ago · Santiago Trujillo Report

0

Hay un enfoque mucho más simple y se puede usar simplemente modificando su código. Es como sigue;

 from datetime import datetime, timedelta from datetime import date def date_bwn_two_dates(start_date, end_date): date_list = [] # The list where we want to store for i in range(int((end_date-start_date).days)+1): # Iterate between the range of dates year = (start_date+timedelta(i)).strftime("%Y") # Get the Year month = (start_date+timedelta(i)).strftime("%m") # Get the month date_a = (start_date+timedelta(i)).strftime("%d") # Get the day date_list.append([year, month, date_a]) # Append the Objects accquired return date_list # return the list for i in date_bwn_two_dates(date(2020, 12, 1), date(2021, 12, 1)): print(i)
over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!