[Risolto] [Python] Operazioni su data

Linguaggi di programmazione: php, perl, python, C, bash, ecc.

[Risolto] [Python] Operazioni su data

Messaggioda vaeVictis » martedì 8 gennaio 2019, 20:35

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, 17: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
vaeVictis
Imperturbabile Insigne
Imperturbabile Insigne
 
Messaggi: 4122
Iscrizione: luglio 2012
Desktop: Gnome
Distribuzione: Ubuntu/Lubuntu 18.04.1 64bit

Re: [Python] Operazioni su data

Messaggioda nuzzopippo » martedì 8 gennaio 2019, 21:05

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 ;)
Avatar utente
nuzzopippo
Entusiasta Emergente
Entusiasta Emergente
 
Messaggi: 1195
Iscrizione: ottobre 2006

Re: [Python] Operazioni su data

Messaggioda melfnt » martedì 8 gennaio 2019, 22:48

nuzzopippo Immagine ha scritto:Per una volta, posso darTi una risposta :


Qui rispondono tutti così (compreso me medesimo).
melfnt
Entusiasta Emergente
Entusiasta Emergente
 
Messaggi: 1301
Iscrizione: ottobre 2011

Re: [Python] Operazioni su data

Messaggioda nuzzopippo » mercoledì 9 gennaio 2019, 7:25

melfnt Immagine ha scritto:
nuzzopippo Immagine ha scritto:Per una volta, posso darTi una risposta :

Qui rispondono tutti così (compreso me medesimo).


Plagio involontario @melfnt, riferivo ad un altro, recente, post cui ho risposto senza avere idea di cosa si parlava :)
Avatar utente
nuzzopippo
Entusiasta Emergente
Entusiasta Emergente
 
Messaggi: 1195
Iscrizione: ottobre 2006

Re: [Python] Operazioni su data

Messaggioda vaeVictis » mercoledì 9 gennaio 2019, 8:29

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
vaeVictis
Imperturbabile Insigne
Imperturbabile Insigne
 
Messaggi: 4122
Iscrizione: luglio 2012
Desktop: Gnome
Distribuzione: Ubuntu/Lubuntu 18.04.1 64bit

Re: [Python] Operazioni su data

Messaggioda nuzzopippo » mercoledì 9 gennaio 2019, 15:02

vaeVictis Immagine 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 :)
Avatar utente
nuzzopippo
Entusiasta Emergente
Entusiasta Emergente
 
Messaggi: 1195
Iscrizione: ottobre 2006

Re: [Python] Operazioni su data

Messaggioda vaeVictis » giovedì 10 gennaio 2019, 17:40

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.»
Avatar utente
vaeVictis
Imperturbabile Insigne
Imperturbabile Insigne
 
Messaggi: 4122
Iscrizione: luglio 2012
Desktop: Gnome
Distribuzione: Ubuntu/Lubuntu 18.04.1 64bit


Torna a Programmazione

Chi c’è in linea

Visualizzano questa sezione: Exabot [Bot], TommyB1992 e 5 ospiti