3

为了获得我path.getmtime从 ftputil 使用的文件的修改时间,但是由于 DST-change 最近创建的文件的返回值有一年的偏移量,说新文件的最后修改时间是从去年开始的。实际上,该文件在“未来”一小时内被修改。
原因是存储文件的操作系统在 DST 上运行,但脚本在其非 DST 上运行。
总的来说,我想删除超过阈值的文件,但现在它也在删除最新的文件,因为它说它来自 2018 年。

我尝试将时间戳转换datetime.utcfromtimestamp为 UTC 时间,但显然 getmtime 不会返回文件的实际时间戳。它已经将其设置为去年的 2018 年,因为它可能看起来价值来自未来。

可以说它的 2019-04-04 10:00:00 UTC。在 DST (UTC+1) 上运行的主机上的文件于 10:45 创建

import ftputil
import datetime
import time

host = ftputil.FTPHost(ftp, user, pwd)

modtime = host.path.getmtime(file)
print datetime.datetime.utcfromtimestamp(modtime)

输出应该是 2019-04-04 09:45:00,但实际上是 2018-04-04 09:45:00。我可以使用日期时间格式做任何我想做的事情,只要 getmtime 通过 2018 时间戳,它就永远不会正确。

有没有办法在有或没有的情况下传递正确的时间戳getmtime?老实说,我不想手动操作它。或者是什么将其更改为一年的抵消?

#第一次海报

4

1 回答 1

2

如果您对 FTP 服务器上的目录具有写入权限,则可以调用FTPHost.synchronize_times(). 这将在服务器上临时创建一个文件,ftputil 将解析文件的时间戳,删除文件,然后为此FTPHost实例调整服务器和客户端之间的时间偏移。

如果您在服务器上没有写访问权限,您仍然可以使用“手动”设置偏移量FTPHost.set_time_shift(time_shift),其中time_shift定义为“server_time - client_time in seconds”。

请参阅https://ftputil.sschwarzer.net/documentation的“时区校正”部分。

于 2019-06-18T21:04:48.437 回答