在python中转换日期时间值以进行比较
我有以下代码。我正在从目录中提取文件,并尝试检查它们是否在过去的24小时内创建,但我似乎无法找到正确的时间或日期时间函数,以便能够将创建时间与开始日期和结束日期进行比较:在python中转换日期时间值以进行比较,python,Python,我有以下代码。我正在从目录中提取文件,并尝试检查它们是否在过去的24小时内创建,但我似乎无法找到正确的时间或日期时间函数,以便能够将创建时间与开始日期和结束日期进行比较: def checkdirectory(folder_paths): #loop through and check directories for new files file_list = [] for path in folder_paths: from_date = datetim
def checkdirectory(folder_paths):
#loop through and check directories for new files
file_list = []
for path in folder_paths:
from_date = datetime.datetime.now() - datetime.timedelta(days=-1)
to_date = datetime.datetime.now()
files = glob.glob(path['folder_path'] + path['file_filter'])
for file in files:
create_time = os.path.getctime(file)
print(create_time)
if datetime.time(create_time) >= from_date and datetime.time(create_time) <= to_date:
file_list.append(file)
def checkdirectory(文件夹路径):
#循环检查目录中的新文件
文件列表=[]
对于文件夹中的路径\u路径:
from_date=datetime.datetime.now()-datetime.timedelta(天数=-1)
to_date=datetime.datetime.now()
files=glob.glob(路径['folder\u path']+路径['file\u filter'])
对于文件中的文件:
create_time=os.path.getctime(文件)
打印(创建时间)
如果datetime.time(create_time)>=from_date和datetime.time(create_time)则存在两个问题:
datetime.time(create_time)
首先,您正在构造一个对象,它表示:
一天中的时间,独立于任何特定的一天
换句话说,它代表“10:30:00.000”,而不是“2018-8-29 10:30:00.000”。因此,如果您想查找“比昨天更新”的文件,这没有多大用处。你想要的是一个物体
第二,你不能只是向构造函数抛出一些随机值,然后希望它是正确的
功能是:
表示从纪元开始的秒数的数字
构造函数花费的时间为:
time(hour=0, minute=0, second=0, microsecond=0, tzinfo=None, *, fold=0)
datetime(year, month, day, hour=0, minute=0, second=0, microsecond=0, tzinfo=None, *, fold=0)
并且datetime
构造函数采用:
time(hour=0, minute=0, second=0, microsecond=0, tzinfo=None, *, fold=0)
datetime(year, month, day, hour=0, minute=0, second=0, microsecond=0, tzinfo=None, *, fold=0)
所以,你有一个秒数,你试图用它作为一小时或一年
您要使用的功能是:
返回与POSIX时间戳对应的本地日期和时间
所以,你想要的是:
datetime.datetime.from_timestamp(create_time)
此外,请注意,回报是:
系统的ctime,在某些系统(如Unix)上是最后一次元数据更改的时间,在其他系统(如Windows)上是创建时间
因此,将其用于名为create\u time
的东西充其量是不可移植的,是特定于Windows的,而最坏的情况是(如果您实际上不在Windows上)是错误的
此外:
减去-1天,这与加1天相同
因此,与查找24小时以下的文件不同,您要查找的是未来24小时以上的文件。使用+
,或使用天=1
当我们这样做的时候:
if datetime.time(create_time) >= from_date and datetime.time(create_time) <= to_date:
如果datetime.time(create_time)>=from_date和datetime.time(create_time),则要使用datetime.datetime
,而不是datetime.time
。您想使用fromtimestamp
类方法从time\t
样式的1970年以来的秒时间戳创建它们(除非您使用的是旧版本的Python,但还没有该方法)。很清楚,您是在Windows上,对吗?只有在Windows上,getctime
表示“创建时间”;在其他地方,它返回上次元数据更新的时间getmtime
更具可移植性,通常是正确的测试方法(因为上次修改的时间是当前文件中确切数据首次存在的时间)。否则,您显然需要使用datetime.datetime
s,而不是datetime.time
s,因为datetime.time
首先不能代表“超过24小时前”的概念。此外,您是否希望在将来找到时间戳?因为否则,测试创建时间在现在之前是没有意义的;除了狭隘的竞争条件(在to_date=datetime.datetime.now()
和glob.glob
调用之间创建的文件),此后不应创建任何内容,并且在极少数情况下(在时钟同步后立即向后移动或诸如此类),您可能仍然希望将其视为“在过去24小时内创建”。
create_time = datetime.datetime.from_timestamp(os.path.getctime(file))
if from_date <= create_time <= to_date: