Dadas dos fechas, la tarea es dividirlas en tiempos de igual duración y obtener el tiempo exacto de cada punto de división.
Entrada: test_date1 = datetime.datetime(1997, 1, 4), test_date2 = datetime.datetime(1997, 1, 30) N = 7
Salida: [datetime.datetime(1997, 1, 4, 0, 0), datetime.datetime(1997, 1, 7, 17, 8, 34, 285714), datetime.datetime(1997, 1, 11, 10, 17 , 8, 571428), datetime.datetime(1997, 1, 15, 3, 25, 42, 857142), datetime.datetime(1997, 1, 18, 20, 34, 17, 142856), datetime.datetime(1997, 1, 22, 13, 42, 51, 428570), fechahora.fechahora(1997, 1, 26, 6, 51, 25, 714284)]
Explicación: se devuelve una lista de fechas de tamaño 7 y cada fecha tiene el mismo delta entre ellas.
Entrada: test_date1 = datetime.datetime(1997, 1, 4), test_date2 = datetime.datetime(1997, 1, 30) N = 4
Salida: [datetime.datetime(1997, 1, 4, 0, 0), datetime.datetime(1997, 1, 10, 12, 0), datetime.datetime(1997, 1, 17, 0, 0), datetime. fechahora(1997, 1, 23, 12, 0)]
Explicación: se devuelve una lista de fechas de tamaño 4 y cada fecha tiene el mismo delta entre ellas.
Método #1: Usar bucle
En esto, calculamos la duración de cada segmento usando la división de la duración total por N. Publica eso, cada fecha se construye usando la multiplicación de la duración del segmento en bucle.
Python3
# Python3 code to demonstrate working of # Convert date range to N equal durations # Using loop import datetime # initializing dates test_date1 = datetime.datetime(1997, 1, 4) test_date2 = datetime.datetime(1997, 1, 30) # printing original dates print("The original date 1 is : " + str(test_date1)) print("The original date 2 is : " + str(test_date2)) # initializing N N = 7 temp = [] # getting diff. diff = ( test_date2 - test_date1) // N for idx in range(0, N): # computing new dates temp.append((test_date1 + idx * diff)) # using strftime to convert to userfriendly # format res = [] for sub in temp: res.append(sub.strftime("%Y/%m/%d %H:%M:%S")) # printing result print("N equal duration dates : " + str(res))
Producción:
La fecha original 1 es: 1997-01-04 00:00:00
La fecha original 2 es: 1997-01-30 00:00:00
N fechas de igual duración: [‘1997/01/04 00:00:00’, ‘1997/01/07 17:08:34’, ‘1997/01/11 10:17:08’, ‘1997/01/ 15 03:25:42′, ’18/01/1997 20:34:17′, ’22/01/1997 13:42:51′, ’26/01/1997 06:51:25’]
Método #2: Usando la función de generador
En esto, realizamos la tarea de producir un resultado intermedio utilizando la función de generador en lugar del enfoque de bucle. La única diferencia es que se devuelve un resultado intermedio.
Python3
# Python3 code to demonstrate working of # Convert date range to N equal durations # Using generator function import datetime def group_util(test_date1, test_date2, N): diff = (test_date2 - test_date1 ) / N for idx in range(N): # using generator function to solve problem # returns intermediate result yield (test_date1 + diff * idx) yield test_date2 # initializing dates test_date1 = datetime.datetime(1997, 1, 4) test_date2 = datetime.datetime(1997, 1, 30) # printing original dates print("The original date 1 is : " + str(test_date1)) print("The original date 2 is : " + str(test_date2)) # initializing N N = 7 # calling generator expression temp = list(group_util(test_date1, test_date2, N)) # using strftime to convert to userfriendly format res = [] for sub in temp: res.append(sub.strftime("%Y/%m/%d %H:%M:%S")) # printing result print("N equal duration dates : " + str(res))
Producción:
La fecha original 1 es: 1997-01-04 00:00:00
La fecha original 2 es: 1997-01-30 00:00:00
N fechas de igual duración: [‘1997/01/04 00:00:00’, ‘1997/01/07 17:08:34’, ‘1997/01/11 10:17:08’, ‘1997/01/ 15 03:25:42’, ‘1997/01/18 20:34:17’, ‘1997/01/22 13:42:51’, ‘1997/01/26 06:51:25’, ‘1997/ 30/01 00:00:00’]
Publicación traducida automáticamente
Artículo escrito por manjeet_04 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA