Как увидеть, если файл старше 3 месяцев в Python? - PullRequest
8 голосов
/ 27 апреля 2011

Мне интересно, как манипулировать временем в Python.Я могу получить (последний измененный) возраст файла, используя функцию os.path.getmtime() следующим образом:

import os.path, time    

os.path.getmtime(oldLoc)

Мне нужно выполнить какой-то тест, чтобы увидеть, находится ли это время в течение последних трех месяцев илинет, но я полностью сбит с толку всеми доступными вариантами времени в Python.

Может кто-нибудь предложить какое-нибудь понимание?С уважением.

Ответы [ 7 ]

20 голосов
/ 27 апреля 2011
time.time() - os.path.getmtime(oldLoc) > (3 * 30 * 24 * 60 * 60)
18 голосов
/ 27 апреля 2011

Вы можете использовать немного даты-времени здесь для ясности.

>>> import datetime
>>> today = datetime.datetime.today()
>>> modified_date = datetime.datetime.fromtimestamp(os.path.getmtime('yourfile'))
>>> duration = today - modified_date
>>> duration.days > 90 # approximation again. there is no direct support for months.
True
4 голосов
/ 20 октября 2015

Чтобы определить, старше ли файл, чем 3 календарных месяца, вы можете использовать dateutil.relativedelta:

#!/usr/bin/env python
import os
from datetime import datetime
from dateutil.relativedelta import relativedelta # $ pip install python-dateutil

three_months_ago = datetime.now() - relativedelta(months=3)
file_time = datetime.fromtimestamp(os.path.getmtime(filename))
if file_time < three_months_ago:
    print("%s is older than 3 months" % filename)

Точное количество дней в «последних 3 месяцах» может отличаться от 90 дней в этом случае. Если вам нужно ровно 90 дней:

from datetime import datetime, timedelta

three_months_ago = datetime.now() - timedelta(days=90)

Если вы хотите учесть изменения в локальном смещении utc, см. Найти, если между датами прошло 24 часа - Python .

2 голосов
/ 20 октября 2015

Я искал что-то подобное и придумал альтернативное решение:

from os import path
from datetime import datetime, timedelta

two_days_ago = datetime.now() - timedelta(days=2)
filetime = datetime.fromtimestamp(path.getctime(file))

if filetime < two_days_ago:
  print "File is more than two days old"
2 голосов
/ 27 апреля 2011

Если вам нужно точное количество дней, вы можете использовать модуль calendar в сочетании с datetime, например,

import calendar
import datetime

def total_number_of_days(number_of_months=3):
    c = calendar.Calendar()
    d = datetime.datetime.now()
    total = 0
    for offset in range(0, number_of_months):
        current_month = d.month - offset
        while current_month <= 0:
            current_month = 12 + current_month
        days_in_month = len( filter(lambda x: x != 0, c.itermonthdays(d.year, current_month)))
        total = total + days_in_month
    return total

, а затем передать результат total_number_of_days() в код, которыйдругие предоставили для даты арифметику.

2 голосов
/ 27 апреля 2011

1 день = 24 часа = 86400 секунд.Тогда 3 месяца - это примерно 90 дней, что составляет 90 * 86400 секунд.Вы можете использовать эту информацию, чтобы добавить / вычесть время.Или вы можете попробовать модуль Python datetime для математики дат.(особенно timedelta)

0 голосов
/ 02 сентября 2016

Это означает, что дата старше на 3 месяца

от даты и времени импорта datetime, timedelta time_period = date.today () - дата (2016, 8, 10)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...