2011-11-24 8 views
7

pisałem ten kod w C#, aby sprawdzić, czy plik jest nieaktualny:W Pythonie: sprawdzić, czy czas modyfikacji pliku jest starsza niż konkretnego datetime

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

Jak mogę napisać to w Pythonie?

Próbowałem tego w python.

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

Mam następujący wyjątek

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

co zrobiłeś do tej pory? staraj się być bardziej konkretnym o tym, czego nie wiesz. Nie oczekuj, że ktoś inny napisze dla ciebie cały kod. –

+0

Zmieniłem swoją odpowiedź, aby przekonać się, co próbowałem. – Luke

Odpowiedz

15

Chcesz skorzystać z funkcji os.path.getmtime (w połączeniu z jednym time.time). To powinno dać ci pomysł:

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

co dokładnie opisuje ten dziwny numer? I jak porównać to z datą? – Luke

+1

@Luke - Są to znaczniki czasu w [epoce unix] (http://en.wikipedia.org/wiki/Unix_time), których jednostką miary jest sekunda. Używasz ich jako normalnych liczb rzeczywistych: dodając je i odejmując. Więc jeśli 'time_a' -' time_b' daje '3600' oznacza to, że minęła godzina pomiędzy tymi dwoma ... – mac

0

co to jest self.synchInterval()?

nie można odjąć się int z datetime, należy użyć datetime.timedelta

1

Problemem nie jest to, że synchIntervall nie jest obiekt datetime Python więc nie można go zmniejszyć. Musisz użyć innego obiektu datetime. jak:

synchIntervall = datetime.day(2) 

lub

synchIntervall = datetime.hour(10) 

lub bardziej kompletne pierwszy:

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

Trzy pierwsze są wymagane. W ten sposób określasz zmienną w wartości, którą można obliczyć za pomocą wartości datetime.datetime.now().

Powiązane problemy