Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #57 da revista programar. Faz já o download aqui!

David Pintassilgo

Subtrair dias a uma data.

Mensagens Recomendadas

David Pintassilgo    5
David Pintassilgo

Boas.

Estou com uma pequena dificuldade:

Eu Tenho por isto:

agora = strftime("%Y-%m-%d %H:%M:%S")

E fico com a data/hora actual, certo?

Eu com só preciso da data e tal... faço isto:

agora = strftime("%Y-%m-%d")

Até aqui tudo bem.

Mas eu queria por exemplo, agarrar no agora e subtrair 3 dias.

Como é que eu 'faço contas' com isso?

Alguma forma simples/prática de fazer o que quero?

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
djthyrax    11
djthyrax

Sem te dar código em concreto (nunca fiz isto em Python), o mais simples é pegares no unix timestamp e tirares-lhe os tais 3 dias (60*60*24*3 segundos).

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
djthyrax    11
djthyrax

Em PHP, era time()-60*60*24*3 e ficavas com o tempo anterior. A ideia é pegares no Unix Timestamp (segundos desde o Unix Epoch (1970)) e subtraires-lhe 3 dias (ou seja, 1 min = 60 segundos, 1 hora = 60 minutos, 1 dia = 24 horas, 3 dias = 60*60*24*3).

import time

x=time.time()
print "Agora: ",x
print "Antes: ",x-60*60*24-3

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
David Pintassilgo    5
David Pintassilgo

Ena bem... isso baralha-me prai isto tudo! :S

Agora:  1201450051.95

Antes:  1201363648.95

Não á prai nada mais pratico?

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
alph    0
alph

A melhor maneira é usares o módulo datetime. Repara no seguinte código.

>>> from datetime import timedelta, date
>>> hoje = date(2008, 1, 27)
>>> intervalo = timedelta(10)
>>> x+d
datetime.date(2008, 2, 4)

x+d devolve um objecto date correspondente a 10 dias depois de hoje.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
alph    0
alph

Tanto podes pôr

hoje = date(2008, 1, 27)

como

ontem = date(2008, 1, 26)

.

A data é definida pelos argumentos. Se quiseres mesmo o dia actual em que o código executa é:

>>> from datetime import date
>>> date.today()
datetime.date(2008, 1, 27)

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
David Pintassilgo    5
David Pintassilgo

Ou seja, para ter o dia 22 neste momento fazia qq coisa como:

from datetime import timedelta, date
hoje = date(date.today())
intervalo = timedelta(5)
passado = hoje - intervalo

é isso?

:D :-[

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
alph    0
alph

from datetime import timedelta, date
hoje = date.today()
intervalo = timedelta(5)
passado = hoje - intervalo

ou explícitamente

dia22 = date(2008,1,22)

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
David Pintassilgo    5
David Pintassilgo

Ou eu não estou a perceber nada, ou não expliquei bem o que queria:  :D

isto assim:

dia22 = date(2008,1,22)

Vai devolver o dia 22, mas amanham continua a devolver 22 em vez de 23, certo?

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
djthyrax    11
djthyrax

O que tu queres é:

hoje = date.today()

Que vai dar a data de hoje (aka, dia actual), ou seja, hoje ia dar 27, amanhã 28, no outro dia 29, ...

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
David Pintassilgo    5
David Pintassilgo

..olha.. 'engracado. Não dá assim como meti ai. Tem de ser como lá atrás.

from datetime import timedelta, date
hoje = date.today()
intervalo = timedelta(5)
passado = hoje - intervalo

(não me deixa juntar isso tudo)

Mas pronto, está feito :D

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
alph    0
alph

Podes juntar, não te esqueças é do import né?

>>> from datetime import timedelta, date
>>> date.today() - timedelta(2)
datetime.date(2008, 1, 25)

De nada.  :D

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora


×

Aviso Sobre Cookies

Ao usar este site você aceita a nossa Política de Privacidade