Pergunta

Gostaria de saber se um objeto Python datetime particular é mais velho do que X horas ou minutos. Eu estou tentando fazer algo semelhante a:

if (datetime.now() - self.timestamp) > 100
# Where 100 is either seconds or minutes

Isso gera um erro de tipo.

O que é a maneira correta de fazer a comparação de tempo de data em python? Já olhou para WorkingWithTime que está perto, mas não exatamente o que eu quero. Eu suponho que eu só quero o objeto datetime representados em segundos para que eu possa fazer uma comparação normal, int.

Por favor, poste listas de data e hora de melhores práticas.

Foi útil?

Solução

Use a classe datetime.timedelta:

>>> from datetime import datetime, timedelta
>>> then = datetime.now() - timedelta(hours = 2)
>>> now = datetime.now()
>>> (now - then) > timedelta(days = 1)
False
>>> (now - then) > timedelta(hours = 1)
True

Seu exemplo poderia ser escrita como:

if (datetime.now() - self.timestamp) > timedelta(seconds = 100)

ou

if (datetime.now() - self.timestamp) > timedelta(minutes = 100)

Outras dicas

Compare a diferença a um timedelta que você criar:

if datetime.datetime.now() - timestamp > datetime.timedelta(seconds = 5):
    print 'older'

Alternativa:

if (datetime.now() - self.timestamp).total_seconds() > 100:

Assumindo self.timestamp é um exemplo de data e hora

Você pode usar uma combinação dos 'dias' e os atributos do objeto retornado 'segundos' para descobrir a resposta, como este:

def seconds_difference(stamp1, stamp2):
    delta = stamp1 - stamp2
    return 24*60*60*delta.days + delta.seconds + delta.microseconds/1000000.

Use abs () in a resposta se você quer sempre um número positivo de segundos.

Para descobrir quantos segundos para o passado um timestamp é, você pode usá-lo como este:

if seconds_difference(datetime.datetime.now(), timestamp) < 100:
     pass

Você pode subtrair dois datetime objetos para encontrar a diferença entre eles.
Você pode usar datetime.fromtimestamp para analisar um carimbo de tempo POSIX.

Assim:

# self.timestamp should be a datetime object
if (datetime.now() - self.timestamp).seconds > 100:
    print "object is over 100 seconds old"
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top