在python中转换日期时间值以进行比较

在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

我有以下代码。我正在从目录中提取文件,并尝试检查它们是否在过去的24小时内创建,但我似乎无法找到正确的时间或日期时间函数,以便能够将创建时间与开始日期和结束日期进行比较:

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: