2011-11-24 7 views
7

ho scritto questo codice in C# per verificare se un file è aggiornato:In Python: verificare se il tempo di modifica del file è più vecchio di un datetime specifica

DateTime? lastTimeModified = file.getLastTimeModified(); 
     if (!lastTimeModified.HasValue) 
     { 
      //File does not exist, so it is out of date 
      return true; 
     } 
     if (lastTimeModified.Value < DateTime.Now.AddMinutes(-synchIntervall)) 
     { 
      return true; 
     } else 
     { 
      return false; 
     } 

Come faccio a scrivere questo in Python?

Ho provato questo in python.

statbuf = os.stat(filename) 
if(statbuf.st_mtime < datetime.datetime.now() - self.synchIntervall): 
    return True 
else: 
    return False 

ho ricevuto la seguente eccezione

message str: unsupported operand type(s) for -: 'datetime.datetime' and 'int' 
+0

cosa hai fatto finora? cerca di essere più specifico su ciò che non sai. Non aspettarti che qualcun altro scriva tutto il codice per te. –

+0

Ho modificato la mia risposta per stabilire cosa ho provato. – Luke

risposta

15

Si desidera utilizzare la funzione os.path.getmtime (in combinazione con il time.time uno). Questo dovrebbe darti un'idea:

>>> import os.path as path 
>>> path.getmtime('next_commit.txt') 
1318340964.0525577 
>>> import time 
>>> time.time() 
1322143114.693798 
+1

cosa descrive esattamente questo strano numero? E come faccio a confrontarlo con una data? – Luke

+1

@Luke - Sono timestamp in [unix epoch] (http://en.wikipedia.org/wiki/Unix_time), la cui unità di misura è secondi. Li usi come numeri reali regolari: aggiungendoli e sottraendoli. Quindi se 'time_a' -' time_b' ti dà '3600' significa che è passata un'ora tra i due ... – mac

0

cos'è self.synchInterval()?

non si può sottrarre un int da un datetime, si dovrebbe usare datetime.timedelta

1

Il problema non è che il vostro synchIntervall non è un oggetto datetime in modo Python non può diminuire. È necessario utilizzare un altro oggetto datetime. piace:

synchIntervall = datetime.day(2) 

o

synchIntervall = datetime.hour(10) 

o una più completa uno:

synchIntervall = datetime.datetime(year, month, day, hour=0, minute=0, second=0) 

i primi tre sono necessari. In questo modo è stata determinata la variabile in un valore che può essere calcolato con il valore datetime.datetime.now().

Problemi correlati