上次文件修改的时间 returns 自 DST 更改以来的一年偏移量

Time of last file modifcation returns a one year offset since DST change

要获取文件的修改时间,我使用来自 ftputil 的 path.getmtime,但是由于夏令时更改,最近创建的文件的 return 值有一年的偏移量,表示最后一次新文件的修改时间是去年的。实际上文件在 "future".
中被修改了一小时 原因是存储文件的 OS 在 DST 上是 运行,但脚本是 运行 的非 DST。
总的来说,我想删除早于阈值的文件,但现在它也在删除最新的文件,因为它说它来自 2018 年。

我尝试将 datetime.utcfromtimestamp 的时间戳转换为 UTC 时间,但显然 getmtime 不是 return 文件的实际时间戳。它已将其设置为去年的 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 的情况下传递正确的时间戳? 老实说,我不想手动操作它。 或者是什么将其更改为一年抵消?

#firsttimeposter

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

如果您在服务器上没有写入权限,您仍然可以将偏移量 "manually" 设置为 FTPHost.set_time_shift(time_shift),其中 time_shift 定义为 "server_time - client_time in seconds"。

参见 https://ftputil.sschwarzer.net/documentation,第 "Time zone correction"。