Back-End

23 abr, 2012

Datas com Python: brincar com objetos é mais legal

Publicidade

Revendo um velho texto sobre como reformatar datas em python do formato “máquina” (Y-m-d) para o formato “humano” (d/m/Y), percebi que estava trabalhando o tempo todo com strings e ainda era preso à forma PHP de pensar em resolver o problema com Arrays e Strings.

Elcio resolveu a questão com apenas uma linha, o que considero muito elegante, mas a questão agora é a gama de funcionalidades que você pode ter com um objeto e uma string. Infelizmente, com string não dá para fazer muita coisa, como por exemplo converter em maiúsculas e minúsculas ou verificar se ela começa com uma vogal ou uma consoante.

Objetos em python são mais legais de trabalhar, pois com eles você tem uma gama de funcionalidades próprias que o elemento possui só pelo fato de ele existir. E o mais legal é que essas funcionalidades só vão existir nesse objeto. Isso quer dizer que você não corre o risco de errar, aplicando uma funcionalidade que não condiz com o que você deseja.

Vamos considerar o exemplo do outro artigo e reformatá-lo, só que desta vez usando o objeto time.

# Fonte:
# http://pleac.sourceforge.net/pleac_python/datesandtimes.html#AEN153
import datetime,time
data = "2008-08-12"
ndata = time.strptime(data, "%Y-%m-%d")
ndata = datetime.datetime(*ndata[0:5])

Pronto, agora você pode usar a variável ndata no formato que achar necessário. Como no nosso caso, podemos usar o formato ISO padrão:

print ndata.strftime('%d/%m/%Y')

O legal de usar objeto, nesse caso, é que podemos fazer contas entre datas usando o timedelta do próprio objeto datetime. Assim podemos ver que dia será daqui a duas semanas com um código simples:

print "Daqui ha duas semanas sera " + ( ndata - datetime.timedelta(weeks=+2) ).strftime('%d/%m/%Y')

Note que na mesma linha coloquei o formatador de data para facilitar o resultado, mas você pode fazer o processo em duas linhas, se achar necessário.

Script final, completo

import datetime,time
data = "2008-08-12"
ndata = time.strptime(data, "%Y-%m-%d")
ndata = datetime.datetime(*ndata[0:5])
print ndata.strftime('%d/%m/%Y')
# "12/08/2008"
print "Daqui a duas semanas sera " + ( ndata - datetime.timedelta(weeks=+2) ).strftime('%d/%m/%Y')