python - 上次文件修改时间返回自 DST 更改以来一年的偏移量
问题描述
为了获得我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
?老实说,我不想手动操作它。或者是什么将其更改为一年的抵消?
#第一次海报
解决方案
如果您对 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的“时区校正”部分。
推荐阅读
- c# - 在 Azure 搜索 .NET SDK 中按复杂类型排序?
- python - 我可以使用例如 scipy griddata 创建和插值吗?
- python - 我在 python 中遇到重复行的问题
- anylogic - 显示模型内的代理移动和时间
- python - Tensorflow 输出节点被 StatefulPartitionedCall 替换,后者在加载时抛出 ValueError
- jquery - 无法运行 2 个 jquery 脚本。如果分页有效,则过滤器无效,反之亦然
- c# - ASP:NET Core MVC 返回 503
- nginx - nginx 反向代理可以为每个端点隔离缓存吗?
- cytoscape.js - Cytoscape中文本背景填充的不同填充?
- azure - Azure 网关 VPN IP 与实际公共 IP 不同