[Risolto] [Python] Operazioni su data

Linguaggi di programmazione: php, perl, python, C, bash e tutti gli altri.
Avatar utente
vaeVictis
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 4703
Iscrizione: venerdì 27 luglio 2012, 17:58
Desktop: Gnome
Distribuzione: Ubuntu 20.04 64bit

[Risolto] [Python] Operazioni su data

Messaggio 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:
Ultima modifica di vaeVictis il giovedì 10 gennaio 2019, 16:53, modificato 1 volta in totale.
Pirates arrrrrrrrrrr awesome!!!
«I fear not the man who has practiced 10000 kicks once,
but I fear the man who has practiced one kick 10000 times.»
Avatar utente
nuzzopippo
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1624
Iscrizione: giovedì 12 ottobre 2006, 11:34

Re: [Python] Operazioni su data

Messaggio 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 ;)
Fatti non foste a viver come bruti ...
melfnt
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1312
Iscrizione: sabato 15 ottobre 2011, 22:25

Re: [Python] Operazioni su data

Messaggio da melfnt »

Qui rispondono tutti così (compreso me medesimo).
Avatar utente
nuzzopippo
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1624
Iscrizione: giovedì 12 ottobre 2006, 11:34

Re: [Python] Operazioni su data

Messaggio da nuzzopippo »

Plagio involontario @melfnt, riferivo ad un altro, recente, post cui ho risposto senza avere idea di cosa si parlava :)
Fatti non foste a viver come bruti ...
Avatar utente
vaeVictis
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 4703
Iscrizione: venerdì 27 luglio 2012, 17:58
Desktop: Gnome
Distribuzione: Ubuntu 20.04 64bit

Re: [Python] Operazioni su data

Messaggio 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)
Pirates arrrrrrrrrrr awesome!!!
«I fear not the man who has practiced 10000 kicks once,
but I fear the man who has practiced one kick 10000 times.»
Avatar utente
nuzzopippo
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1624
Iscrizione: giovedì 12 ottobre 2006, 11:34

Re: [Python] Operazioni su data

Messaggio 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 :)
Fatti non foste a viver come bruti ...
Avatar utente
vaeVictis
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 4703
Iscrizione: venerdì 27 luglio 2012, 17:58
Desktop: Gnome
Distribuzione: Ubuntu 20.04 64bit

Re: [Python] Operazioni su data

Messaggio 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:
Pirates arrrrrrrrrrr awesome!!!
«I fear not the man who has practiced 10000 kicks once,
but I fear the man who has practiced one kick 10000 times.»
Scrivi risposta

Ritorna a “Programmazione”

Chi c’è in linea

Visualizzano questa sezione: 0 utenti iscritti e 10 ospiti