2011-11-24 22 views
7

escribí este código en C# para comprobar si un archivo está actualizado:En Python: comprobar si la fecha de modificación del archivo es mayor que una fecha y hora específica

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; 
     } 

¿Cómo se escribe esto en Python?

Intenté esto en python.

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

que tiene la siguiente excepción

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

¿Qué has hecho hasta ahora? trata de ser más específico acerca de lo que no sabes. No espere que otra persona escriba todo el código para usted. –

+0

Edité mi respuesta para concretar lo que he intentado. – Luke

Respuesta

15

Usted desea utilizar la función de os.path.getmtime (en combinación con el time.time uno). Esto debería darle una idea:

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

¿qué describe exactamente este extraño número? ¿Y cómo lo comparo con una fecha? – Luke

+1

@Luke - Son marcas de tiempo en [unix epoch] (http://en.wikipedia.org/wiki/Unix_time), cuya unidad de medida es segundos. Los usa como números reales regulares: sumando y restando. Entonces, si 'time_a' -' time_b' te da '3600' significa que ha pasado una hora entre los dos ... – mac

0

¿Qué es self.synchInterval()?

no se puede restar un int de un datetime, se debe utilizar datetime.timedelta

1

El problema no es que su synchIntervall no es un objeto de fecha y hora lo que Python no puede disminuirlo. Necesita usar otro objeto datetime. gustan:

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

los tres primeros son obligatorios:

synchIntervall = datetime.day(2) 

o

synchIntervall = datetime.hour(10) 

o una más completa uno. De esta forma se determina la variable en un valor que se puede calcular con el valor datetime.datetime.now().

Cuestiones relacionadas