yyyy example create python html datetime time format

python - example - Enumere los elementos en el formato de tiempo y calcule el tiempo dif a partir de hoy



timedelta python example (4)

Este código de Python 2 / Python 3 es una combinación de las respuestas de Martijn y Tagc.

from datetime import datetime def parse_dates(dates_array): today = datetime.today() for d in dates_array: yield (today - datetime(*map(int, d))).days if __name__ == ''__main__'': dates = [ [''2017'', ''01'', ''15''], [''2017'', ''01'', ''14''], [''2017'', ''01'', ''13''], ] for d in parse_dates(dates): print(d)

salida

4 5 6

Como dijo Tagc, si la fecha puede cambiar mientras se ejecuta este código, entonces necesita mover today = datetime.today() dentro del ciclo for .

Aquí es esencialmente lo mismo, sin una función:

from datetime import datetime dates = [ [''2017'', ''01'', ''15''], [''2017'', ''01'', ''14''], [''2017'', ''01'', ''13''], ] today = datetime.today() for d in dates: delta = (today - datetime(*map(int, d))).days print(delta)

Estoy usando Python 3.6 y tengo algunos problemas para calcular la fecha.

Tengo una lista compuesta de elementos de fecha como a continuación:

dates = [[''2017'',''01'',''15''], [''2017'',''01'',''14''], [''2017'',''01'',''13''],...]

Me gustaría hacerlo a formato de tiempo y calcular los días a partir de hoy.

¿Cómo puedo arreglar mi código?

A continuación está mi código:

dates = [[''2017'', ''01'', ''15''], [''2017'', ''01'', ''14''], [''2017'', ''01'', ''13'']] for date in dates: date_cand = "-".join(date) date_cand_time = time.strptime(date_cand,"%Y-%m-%d") (datetime.date.today() - datetime.date(date_cand_time)).days

Tengo este mensaje de error ahora:

TypeError: an integer is required (got type time.struct_time)

El resultado que me gustaría tener es:

4 5 6

Por favor, ayúdame a resolver esto.


Este código parece funcionar. Tenga en cuenta que uso datetime.strptime lugar de time.strptime , en caso de que haya alguna diferencia:

from datetime import datetime def parse_dates(dates_array): today = datetime.today() for date_array in dates_array: date = datetime.strptime(''-''.join(date_array), ''%Y-%m-%d'') yield (today - date).days if __name__ == ''__main__'': dates = [[''2017'', ''01'', ''15''], [''2017'', ''01'', ''14''], [''2017'', ''01'', ''13'']] for days_from_today in parse_dates(dates): print(days_from_today)

Salida

4 5 6

Advertencia

Muevo el cálculo de today fuera del bucle for para obtener beneficios de rendimiento menores, pero esto hará que el código se rompa si deja este código ejecutándose pasada la medianoche. :)


date_cand_time no es un entero, es una tupla con enteros. No puede pasar eso al objeto datetime.date() . En su lugar, tendría que pasar los primeros 3 elementos como argumentos separados:

(datetime.date.today() - datetime.date(*date_cand_time[:3])).days

* Le dice a Python que aplique los valores de la lst_reg_date_cand_time[:3] como argumentos separados.

Sin embargo, no tomaría un desvío a través de time.strptime() ; simplemente asigne las 3 cadenas a los enteros y páselos directamente:

date_cand = datetime.date(*map(int, date)) (datetime.date.today() - date_cand).days

Los argumentos para datetime.date() son, después de todo, year , month y day , en el mismo orden en que tiene sus cadenas.

Si debe usar strptime , utilice datetime.datetime.strptime() y extraiga el objeto de date de eso:

date_cand = datetime.datetime.strptime("-".join(date), "%Y-%m-%d") (datetime.date.today() - date_cand.date()).days

Manifestación:

>>> import datetime >>> dates = [[''2017'',''01'',''15''], [''2017'',''01'',''14''], [''2017'',''01'',''13'']] >>> for date in dates: ... # using map, produces a date ... date_cand = datetime.date(*map(int, date)) ... print(date_cand, (datetime.date.today() - date_cand).days) ... # using datetime.datetime.strptime, produces a datetime ... date_cand = datetime.datetime.strptime("-".join(date), "%Y-%m-%d") ... print(date_cand, (datetime.date.today() - date_cand.date()).days) ... 2017-01-15 4 2017-01-15 00:00:00 4 2017-01-14 5 2017-01-14 00:00:00 5 2017-01-13 6 2017-01-13 00:00:00 6


Como datetime.date estaba usando en su código para el cálculo delta, aquí hay una forma clara de hacer lo que quiere.

import datetime dates = [[''2017'', ''01'', ''15''], [''2017'', ''01'', ''14''], [''2017'', ''01'', ''13'']] today = datetime.date.today() for date in dates: year,month,day = [int(s) for s in date] #convert to int and assign to vars : year, month, day date_cand_time = datetime.date(year,month,day) #convert date to datetime.date delta = (today - date_cand_time).days #calculate the day delta print delta

Salida

4 5 6