Compare dates in Python

2

Good afternoon!     I need to solve the following scenario in python: I have one or more .txt files in a folder, but I want to return only the files that have the modification date according to the date I want (initial and final), but I'm not able to do this comparison as a date with user input:

import re
import os
from datetime import datetime as dt


#definindo datas
dtEntradaInicial = input('Data inicial: ')
dtEntradaFinal = input('Data final: ')

print(datetime.strptime(dtEntradaInicial, "%d/%m/%y").date())
print(datetime.strptime(dtEntradaFinal, "%d/%m/%y").date())

#testando retorno de data de modificação do arquivo
modificacao = datetime.fromtimestamp(os.path.getmtime('/c:/arquivoteste.txt'))
print('A data de modificação do arquivo é: ', modificacao)

if modificacao >= dtEntradaInicial and modificacao <= dtEntradaFinal:
   print('Consegui comparar datas com sucesso!')
    
asked by anonymous 05.09.2018 / 15:18

3 answers

6

You are converting the user input to date but you are not saving the result.

You can save the converted input to a variable. Ex.:

from datetime import datetime

# Recebendo input do usuário (como string)
input_data_inicial = input('Data inicial:')
input_data_final = input('Data final:')

# Convertendo input para datetime.datetime
data_inicial = datetime.strptime(input_data_inicial, "%d/%m/%y")
data_final = datetime.strptime(input_data_final, "%d/%m/%y")

# apenas para demonstração atribui um valor 'hard-coded' para data_modificao
data_modificacao = datetime.now()

if data_inicial <= data_modificacao <= data_final:
    print('data_modificacao está entre o período selecionado')
else:
    print('data_modificacao está fora do período selecionado')

See the code in action at Repl.it

    
05.09.2018 / 15:26
2

Leveraging the logic demonstrated in fernandosavio's answer and integrating with # about how to list recent files in a directory, you can do something like:

import time

from datetime import datetime
from pathlib import Path

def filtro_data_modificacao(inicial, final, *, formato='%d/%m/%y'):

    # Gera o timestamp a partir das datas de entrada:
    inicial = time.mktime(datetime.strptime(inicial, formato).timetuple())
    final = time.mktime(datetime.strptime(final, formato).timetuple())

    def filtro(arquivo):
        return inicial <= arquivo.stat().st_mtime <= final

    return filtro

diretorio = Path('/seu/diretorio')
arquivos = directory.glob('*.txt')
arquivos_modificados = filter(filtro_data_modificacao('01/09/18', '05/09/18'), arquivos)

for arquivo in arquivos_modificados:
    print(arquivo)

So, by doing filtro_data_modificacao('01/09/18', '05/09/18') you generate a filter that will return true if a certain file was modified in this range. You can still, if necessary, set the entry format if, for example, you need to enter the four-digit year:

filter(filtro_data_modificacao('01/09/2018', '05/09/2018', formato='%d/%m/%Y'), arquivos)
    
05.09.2018 / 16:37
0

Topical 3 helped me a lot when comparing dates.

link

Also in the stack in English. link

    
11.09.2018 / 04:30