Confronto Orario Finale con Orario Sistema

di il
6 risposte

Confronto Orario Finale con Orario Sistema

Vorrei che quando la variabile lot (contenente l'orario finale) è uguale all' ora attuale di sistema esegue un print con OK.
Premessa che ho un timer (anche grafico) messo in una variabile ts. (NON presente in questa parte di codice)
Di seguito il codice utile per la realizzazione:

import datetime
import time
from datetime import timedelta

#Funzione Timer

corrente = time.localtime(time.time())
ts = time.strftime("%H %M %S", corrente)
print (ts)
# Altro Codice
	
#Funzione

# Altro Codice
dataCorrente = datetime.datetime.now()
oraAttuale = (dataCorrente.strftime("%H:%M:%S"))
lit = (datetime.datetime.strptime(oraAttuale, "%H:%M:%S") + datetime.timedelta(minutes=1))
lot = lit.strftime("%H:%M:%S")
print (lot)
# Altro Codice

while(str(ts) == str(lot)):
    print("OK")
    break
Esempio di quello che vorrei ottenere:

Ts = 12:00:00

lot = 12:01:00

Quando il timer (orario di sistema) è uguale a lot print ("OK")

Credo che non riesco a ottenerlo perchè la variabile ts non viene incrementata e rimane fissa. Anche se in realtà nel mio codice finale se printo la variabile ts lo fa in loop perchè penso sia legata a un evento(che viene utilizzato per il timer visivo). self.Bind(wx.EVT_TIMER, self.Timer)

6 Risposte

  • Re: Confronto Orario Finale con Orario Sistema

    Come hai già intuito se non aggiorni in continuo ts non vai da nessuna parte.

    In ogni caso ci sono degli errori:
    1) ts e lot non hanno la stessa formattazione --> non saranno mai uguali
    2) cito: "Quando il timer (orario di sistema) è uguale a lot print ("OK")" --> if ts == lot: print ("OK")

    Ti consiglio di dare un'occhiata al modulo sched.
  • Re: Confronto Orario Finale con Orario Sistema

    SuperQWE ha scritto:


    Come hai già intuito se non aggiorni in continuo ts non vai da nessuna parte.

    In ogni caso ci sono degli errori:
    1) ts e lot non hanno la stessa formattazione --> non saranno mai uguali
    2) cito: "Quando il timer (orario di sistema) è uguale a lot print ("OK")" --> if ts == lot: print ("OK")

    Ti consiglio di dare un'occhiata al modulo sched.
    Il formato mi era sfuggito, quello lo sistemo aggiungendo i : a ts.
    Per quanto riguarda il controllo, con l'if? In quel caso si verifica solo se i due tempi coincidono quando parte l'if. Quindi credo mai? Non è meglio un while? --> While ts == lot: print ("OK")
    Grazie mille!
  • Re: Confronto Orario Finale con Orario Sistema

    Secondo me per confrontare due date è meglio usare il formato unixtime, cioè il numero di secondi dal 1 gennaio 1970. Si possono confrontare anche gli oggetti di classe datetime
    In questo modo è molto più semplice fare i confronti:
    import datetime
    import time
    
    #Funzione Timer
    
    ts = int(time.time())
    print (ts)
    # Altro Codice
    
    #Funzione
    
    # Altro Codice
    dataCorrente = int(datetime.datetime.now().timestamp())+60
    
    print (dataCorrente)
    # Altro Codice
    
    while(int(time.time()) < dataCorrente):
        print("OK")
        time.sleep(5)
    
  • Re: Confronto Orario Finale con Orario Sistema

    Andrea Quaglia ha scritto:


    Secondo me per confrontare due date è meglio usare il formato unixtime, cioè il numero di secondi dal 1 gennaio 1970. Si possono confrontare anche gli oggetti di classe datetime
    In questo modo è molto più semplice fare i confronti:
    import datetime
    import time
    
    #Funzione Timer
    
    ts = int(time.time())
    print (ts)
    # Altro Codice
    
    #Funzione
    
    # Altro Codice
    dataCorrente = int(datetime.datetime.now().timestamp())+60
    
    print (dataCorrente)
    # Altro Codice
    
    while(int(time.time()) < dataCorrente):
        print("OK")
        time.sleep(5)
    
    Grazie per la risposta,
    avevo creato una funzione (controlloFinale) nel quale creavo una nuova variabile ts2 (identica alla precedente) che veniva confrontata con l'altro tempo. E diciamo che funzionava, ma poi pensandoci bene non è quello che voglio ottenere. Anche perchè ho dovuto inserire un nuovo EVT_TIMER che mi creava un problema di tipo visivo per la prima funzione deltimer di ts. Si bloccava visivamente ma continuava ad incrementare. Quello che vorrei fare adesso è: prendere la variabile ts del timer e usare quella, ma portandola dentro la funzione non viene incrementata. Come faccio a incrementarla come nell'altra funzione? (Penso che si incrementi perchè è legata al EVT_TIMER, mentre nell'altra funzione no)
    Mi spiego meglio, essendo legata a un EVT_TIMER nella funzione Timer se faccio un print della variabile ts mi printa in loop il valore. Io vorrei che facesse altretanto in una nuova funzione che si trova appena sotto. Ma se inserisco ts nella nuova funzione ed eseguo un print di essa, me la printa una singola volta, (quindi è come se perdesse l'EVT_TIMER). Come potrei fare per risolvere questa cosa? Vorrei che la variabile ts si incrementi come nella funzione timer. Grazie in anticipo!
  • Re: Confronto Orario Finale con Orario Sistema

    C'è un grosso errore di base: il valore di ts non si aggiorna da solo.
    ts devi riassegnarla prima di effettuare ogni verifica.
    Andrea Quaglia ti ha già postato la soluzione, ma come come integrarlo nel tuo programma è impossibile darti indicazioni senza vedere il tuo codice.
  • Re: Confronto Orario Finale con Orario Sistema

    SuperQWE ha scritto:


    C'è un grosso errore di base: il valore di ts non si aggiorna da solo.
    ts devi riassegnarla prima di effettuare ogni verifica.
    Andrea Quaglia ti ha già postato la soluzione, ma come come integrarlo nel tuo programma è impossibile darti indicazioni senza vedere il tuo codice.
    Ciao,
    ti posso assicurare che ts in una funzione Timer che ho nel codice si incrementa ogni secondo, se eseguo un print della variabile lo fa il loop finchè non lo interrompo. Questo perchè è legata a un EVT_Timer. almeno penso...
Devi accedere o registrarti per scrivere nel forum
6 risposte