Время последней модификации файла возвращает смещение в один год после изменения летнего времени - PullRequest
1 голос
/ 04 апреля 2019

Чтобы получить время модификации файла, я использую path.getmtime из ftputil, но, поскольку DST-изменение, возвращаемое значение недавно созданных файлов имеет смещение в один год, говоря, что время последнего изменения новых файлов - с прошлого года,На самом деле файл был изменен за один час в «будущем».
Причиной этого является то, что ОС, в которой хранится файл, работает на 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-049:45:00.Я могу делать все, что захочу, с форматированием даты и времени, пока getmtime передает метку времени 2018, она никогда не становится правильной.

Есть ли способ передать правильную метку времени с getmtime или без него?Честно говоря, я не хочу манипулировать им вручную.Или что меняет его на однолетнее смещение?

# firsttimeposter

1 Ответ

1 голос
/ 19 июня 2019

Если у вас есть доступ для записи в каталог на 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, раздел «Коррекция часового пояса».

...