2011-11-24 30 views
7

tôi đã viết mã này trong C# để kiểm tra xem một tập tin là hết hạn:Trong Python: kiểm tra xem thời gian chỉnh sửa tập tin cũ hơn một datetime cụ

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

Làm thế nào để viết những dòng này trong python?

Tôi đã thử điều này trong python.

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

tôi có ngoại lệ sau

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

bạn đã làm gì cho đến nay? cố gắng cụ thể hơn về những gì bạn không biết. Đừng mong ai đó viết tất cả mã cho bạn. –

+0

Tôi đã chỉnh sửa câu trả lời của mình để conlcude những gì tôi đã cố gắng. – Luke

Trả lời

15

Bạn muốn sử dụng các chức năng os.path.getmtime (kết hợp với các time.time một). Điều này sẽ cung cấp cho bạn ý tưởng:

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

chính xác số liệu lạ này mô tả những gì? Và làm thế nào để tôi so sánh nó với một ngày? – Luke

+1

@Luke - Chúng là dấu thời gian trong [unix epoch] (http://en.wikipedia.org/wiki/Unix_time), có đơn vị đo lường là giây. Bạn sử dụng chúng làm số thực thường xuyên: bằng cách cộng và trừ chúng. Vì vậy, nếu 'time_a' -' time_b' cho bạn '3600' nó có nghĩa là một giờ đã trôi qua giữa hai ... – mac

0

self.synchInterval() là gì?

bạn không thể trừ một int từ một datetime, bạn nên sử dụng datetime.timedelta

1

Vấn đề có là synchIntervall của bạn không phải là một đối tượng datetime để Python không thể làm giảm nó. Bạn cần phải sử dụng một đối tượng datetime khác. thích:

synchIntervall = datetime.day(2) 

hoặc

synchIntervall = datetime.hour(10) 

hoặc một hoàn chỉnh hơn một:

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

ba đầu tiên được yêu cầu. Bằng cách này bạn xác định biến trong một giá trị có thể được tính toán với giá trị datetime.datetime.now().

Các vấn đề liên quan