Strano il primo errore che ricevi perché, a giudicare da questo Tuo print
print(inizio,"inizio")
print(fine,"fine")
questo è il risultato:
('23/01/2023, 02:37:48',) inizio
('23/01/2023, 02:38:24',) fine
"inizio" e "fine" sono due tuple, dovresti ricevere un diverso errore
Python 3.10.6 (main, Nov 14 2022, 16:10:14) [GCC 11.3.0] on linux
Type "help", "copyright", "credits" or "license()" for more information.
import time
t_inizio = ('23/01/2023, 02:37:48',)
t_fine = ('23/01/2023, 02:38:24',)
print(type(t_inizio), type(t_fine))
<class 'tuple'> <class 'tuple'>
tempo_inizio = time.strptime(t_inizio, "%d-%m-%Y, %H:%M:%S")
Traceback (most recent call last):
File "/usr/lib/python3.10/idlelib/run.py", line 578, in runcode
exec(code, self.locals)
File "<pyshell#4>", line 1, in <module>
File "/usr/lib/python3.10/_strptime.py", line 562, in _strptime_time
tt = _strptime(data_string, format)[0]
File "/usr/lib/python3.10/_strptime.py", line 317, in _strptime
raise TypeError(msg.format(index, type(arg)))
TypeError: strptime() argument 0 must be str, not <class 'tuple'>
L'errore che ricevi è causato dal carattere separatore di data, che nelle stringhe presentate è "/" mentre nella stringa di formato è "-"
str_inizio = t_inizio[0]
str_fine = t_fine[0]
print(type(str_inizio), str_inizio, type(str_fine), str_fine)
<class 'str'> 23/01/2023, 02:37:48 <class 'str'> 23/01/2023, 02:38:24
tempo_inizio = time.strptime(str_inizio, "%d-%m-%Y, %H:%M:%S")
Traceback (most recent call last):
File "/usr/lib/python3.10/idlelib/run.py", line 578, in runcode
exec(code, self.locals)
File "<pyshell#8>", line 1, in <module>
File "/usr/lib/python3.10/_strptime.py", line 562, in _strptime_time
tt = _strptime(data_string, format)[0]
File "/usr/lib/python3.10/_strptime.py", line 349, in _strptime
raise ValueError("time data %r does not match format %r" %
ValueError: time data '23/01/2023, 02:37:48' does not match format '%d-%m-%Y, %H:%M:%S'
per ottenere una conversione valida dovresti, quindi, utilizzare una adeguata stringa di formattazione
tempo_inizio = time.strptime(str_inizio, "%d/%m/%Y, %H:%M:%S")
temp_fine = time.strptime(str_fine, "%d/%m/%Y, %H:%M:%S")
così la conversione ha luogo ma qui sorge un altro problema, ciò che ottieni dalle conversioni sono due oggetti "struct_time"
print(tempo_inizio, temp_fine)
time.struct_time(tm_year=2023, tm_mon=1, tm_mday=23, tm_hour=2, tm_min=37, tm_sec=48, tm_wday=0, tm_yday=23, tm_isdst=-1) time.struct_time(tm_year=2023, tm_mon=1, tm_mday=23, tm_hour=2, tm_min=38, tm_sec=24, tm_wday=0, tm_yday=23, tm_isdst=-1)
Che non supportano direttamente l'operatore di sottrazione
differenza = temp_fine - tempo_inizio
Traceback (most recent call last):
File "/usr/lib/python3.10/idlelib/run.py", line 578, in runcode
exec(code, self.locals)
File "<pyshell#12>", line 1, in <module>
TypeError: unsupported operand type(s) for -: 'time.struct_time' and 'time.struct_time'
Vi sarebbero varie manipolazioni possibili ma non mi sembra il caso di complicarsi la vita, utilizzando un modulo dedicato alle "ore" su dati che coinvolgono data e ora e c'è il modulo "
datetime" per trattare direttamente tali dati, prova ad importare datetime invece di time. applicandolo sulle stringhe dati ottenute, una cosa del genere
from datetime import datetime
inizio = datetime.strptime(str_inizio, "%d/%m/%Y, %H:%M:%S")
fine = datetime.strptime(str_fine, "%d/%m/%Y, %H:%M:%S")
differenza = fine - inizio
print(differenza)
0:00:36
differenza.total_seconds()
36.0
Come puoi vedere, potrai anche ottenere direttamente i secondi occorsi per la lavorazione che sono il risultato che credo Ti serva