Pagina 1 di 1

[Risolto] [Python] Operazioni su data

Inviato: martedì 8 gennaio 2019, 19:35
da vaeVictis
Ciao a tutti.
Ho una stringa che rappresenta una data e un'ora, come nell'esempio:

Codice: Seleziona tutto

2019-1-10-07:45
Devo effettuare due operazioni su questa data:
1) aggiungere un'ora (tenendo in considerazione anche l'eventuale modifica al giorno)
2) calcolare la differenza rispetto un'altra data (non so in che termini sia possibile, se in secondi o cosa).


Attendo che qualcuno mi illumini di immenso.
Grazie in anticipo

:ciao:

Re: [Python] Operazioni su data

Inviato: martedì 8 gennaio 2019, 20:05
da nuzzopippo
Per una volta, posso darTi una risposta : il modulo datetime ... guarda questo post, credo Ti sarà sufficiente ;)

[Edit] dato che c'ero mi son rinfrescato la memoria ... una cosa del genere ti servirebbe?

Codice: Seleziona tutto

Python 3.6.7 (default, Oct 22 2018, 11:32:17) 
[GCC 8.2.0] on linux
Type "help", "copyright", "credits" or "license()" for more information.
>>> import datetime
>>> def aggiusta_data(txt):
		       lst = txt.split('-')
		       data = datetime.date(int(lst[0]),
					    int(lst[1]),
					    int(lst[2])
					    )
		       lst = lst[3].split(':')
		       ora = datetime.time(int(lst[0]), int(lst[1]))
		       data_compl = datetime.datetime.combine(data, ora) + datetime.timedelta(hours=1)
		       return data_compl

							    
>>> data1 = aggiusta_data('2019-1-10-07:45')
							    
>>> print(data1)
							    
2019-01-10 08:45:00
>>> data2 = aggiusta_data('2019-1-12-08:45')
							    
>>> print(data2)
							    
2019-01-12 09:45:00
>>> print(data2 - data1)
							    
2 days, 1:00:00
>>> print(data1 - data2)
					    
-3 days, 23:00:00
>>> 
>>> data2 > data1
							    
True
>>> data1 > data2
							    
False
>>> 
da notare il valore negativo, è stato un assurdo test che mi è venuto in mente ... non mi convince il risultato ;)

Re: [Python] Operazioni su data

Inviato: martedì 8 gennaio 2019, 21:48
da melfnt
Qui rispondono tutti così (compreso me medesimo).

Re: [Python] Operazioni su data

Inviato: mercoledì 9 gennaio 2019, 6:25
da nuzzopippo
Plagio involontario @melfnt, riferivo ad un altro, recente, post cui ho risposto senza avere idea di cosa si parlava :)

Re: [Python] Operazioni su data

Inviato: mercoledì 9 gennaio 2019, 7:29
da vaeVictis
datetime non ero mai riuscito a usarlo prima d'ora. che era la prima volta che provo a usarlo, tra l'altro.
Grazie per l'indicazione con il codice.

.. ma se volessi convertire la stringa che rappresenta la data con ora direttamente in un oggetto di tipo datetime.date?
Non si può fare in un passaggio solo?

p.s.:
darTi
non esageriaMo :D

edit:
.. ma se volessi convertire la stringa che rappresenta la data con ora direttamente in un oggetto di tipo datetime.date?
Non si può fare in un passaggio solo?
Sì, c'è

Codice: Seleziona tutto

>>> foo = '2019-1-11 08:00'
>>> datetime.datetime.strptime(foo, '%Y-%m-%d %H:%M')
datetime.datetime(2019, 1, 11, 8, 0)

Re: [Python] Operazioni su data

Inviato: mercoledì 9 gennaio 2019, 14:02
da nuzzopippo
vaeVictis [url=https://forum.ubuntu-it.org/viewtopic.php?p=5106792#p5106792][img]https://forum.ubuntu-it.org/images/icons/icona-cita.gif[/img][/url] ha scritto:...
Sì, c'è

Codice: Seleziona tutto

>>> foo = '2019-1-11 08:00'
>>> datetime.datetime.strptime(foo, '%Y-%m-%d %H:%M')
datetime.datetime(2019, 1, 11, 8, 0)
... ecco come funziona! Non mi riusciva di utilizzarla, help striminzito

Codice: Seleziona tutto

     |  strptime(...) from builtins.type
     |      string, format -> new datetime parsed from a string (like time.strptime()).
e docs in inglese ... tutta la "funzione", quindi, si riduce a :

Codice: Seleziona tutto

>>> data = datetime.datetime.strptime('2019-1-10-07:45', '%Y-%m-%d-%H:%M') + datetime.timedelta(hours=1)
>>> print(data)
2019-01-10 08:45:00
>>> 
... a volte, ci si gira attorno e poi basta vederlo :)

Re: [Python] Operazioni su data

Inviato: giovedì 10 gennaio 2019, 16:40
da vaeVictis
nuzzopippo ha scritto:Non mi riusciva di utilizzarla, help striminzito
Concordo e anche io ci ho messo un po' a capire.

Grazie per l'aiuto. Problema risolto :)
:ciao: