我在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;
}
我如何在python中写这个?
我在python中试过这个。
statbuf = os.stat(filename)
if(statbuf.st_mtime < datetime.datetime.now() - self.synchIntervall):
return True
else:
return False
我收到了以下异常
message str: unsupported operand type(s) for -: 'datetime.datetime' and 'int'
答案 0 :(得分:17)
您想使用os.path.getmtime
功能(与time.time
功能结合使用)。这应该给你一个想法:
>>> import os.path as path
>>> path.getmtime('next_commit.txt')
1318340964.0525577
>>> import time
>>> time.time()
1322143114.693798
答案 1 :(得分:1)
问题是你的synchIntervall不是一个日期时间对象,所以Python不能减少它。您需要使用另一个datetime对象。 像:
synchIntervall = datetime.day(2)
或
synchIntervall = datetime.hour(10)
或更完整的一个:
synchIntervall = datetime.datetime(year, month, day, hour=0, minute=0, second=0)
前三个是必需的。 这样,您可以使用datetime.datetime.now()值计算值中的变量。
答案 2 :(得分:1)
@ E235在接受的答案中的评论对我来说真的很好。
此处已格式化;
import os.path as path
def is_file_older_than_x_days(file, days=1):
file_time = path.getmtime(file)
# Check against 24 hours
if (time.time() - file_time) / 3600 > 24*days:
return True
else:
return False
答案 3 :(得分:0)
什么是self.synchInterval()
?
您无法从int
中减去datetime
,您应该使用datetime.timedelta
答案 4 :(得分:0)
这是使用 timedelta 的通用解决方案
newRoom.php
这可以如下使用。
要检测超过 10 秒的文件:
from datetime import datetime
def is_file_older_than (file, delta):
cutoff = datetime.utcnow() - delta
mtime = datetime.utcfromtimestamp(os.path.getmtime(file))
if mtime < cutoff:
return True
return False
要检测超过 10 天的文件:
from datetime import timedelta
is_file_older_than(filename, timedelta(seconds=10))
如果你可以安装外部依赖,你也可以做几个月和几年:
from datetime import timedelta
is_file_older_than(filename, timedelta(days=10))