Datas com Python: brincar com objetos é mais legal

Michael Granados
em Python

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')

Michael Granados

é Gerente de Tecnologia no portal Virgula. Formado em Design Gráfico pelo CEFET Campos - RJ, já escreveu artigos para revistas e sites especializados na área de TI. Foi professor e ministrou palestras em grandes eventos como PHPConference e WPSummit. Desenvolve nas linguagens PHP, RubyOnRails, Python, Asp, Node e JavaScript (DOM). Auxiliou no desenvolvimento das ferramentas de integração de e-commerce com o gateway de pagamento PagSeguro. Especialista em WordPress, mantém plugins abertos na comunidade. Programador server-side e client-side com fluência em HTML5 e CSS3 técnicas de desenvolvimento ágil scrum e XP. http://dgmike.com.br

1 comentário Comente também

Dê Sua Opinião

O seu endereço de email não será publicado Campos obrigatórios são marcados *

Este projeto é mantido e patrocinado pelas empresas: