terça-feira, 5 de novembro de 2013

Operações com data de forma fácil

Quando se trata de operações com data, só existem dois tipos de programados, os que já enfrentaram problemas e os que ainda vão enfrentar.

Quem já precisou somar ou subtrair um dia, um mês ou ano em uma data?
Com certeza você já deve ter encontrado diversas soluções, das mais simples as mais mirabolantes.

A solução mais simples que encontrei até hoje foi utilizando a biblioteca relativedelta. Para manter a simplicidade dos posts não vou entrar em muitos detalhes, um código vale mais que mil palavras.

# Importamos as libs necessárias
>>> import datetime
>>> from dateutil.relativedelta import *
>>> import calendar

# Gravamos a data atual na variável hoje
>>> hoje=datetime.datetime.today()
>>> print(hoje)
2013-11-05 12:03:07.014243

# Adicionar um dia a hoje.
>>> print(hoje + relativedelta(days=1))
2013-11-06 12:03:07.014243

# Adicionar um mês a hoje.
>>> print(hoje + relativedelta(months=1))
2013-12-05 12:03:07.014243

# Adicionar um ano a hoje.
>>> print(hoje + relativedelta(years=1))
2014-11-05 12:03:07.014243

# Quanto tempo falta para o fim do ano?
>>> fim_do_ano=datetime.date(2013,12,31)
>>> print(relativedelta(fim_do_ano, hoje))
relativedelta(months=+1, days=+25, hours=+11, minutes=+56, seconds=+52, microseconds=+985757)

# Qual a data da próxima sexta feira?
>>> print(hoje+relativedelta(weekday=calendar.FRIDAY))
2013-11-08 12:03:07.014243
# Ou assim:
>>> print(hoje+relativedelta(weekday=FR))
2013-11-08 12:03:07.014243

# Qual a data da segunda sexta feira, a partir de hoje?
>>> print(hoje+relativedelta(weekday=FR(+2)))
2013-11-15 12:03:07.014243

# Descobrir a quanto tempo alguém está vivo com base na sua data de nascimento
>>> nascimento=datetime.date(2000,1,1)
>>> print(relativedelta(hoje, nascimento))
relativedelta(years=+13, months=+10, days=+4, hours=+12, minutes=+3, seconds=+7, microseconds=+14243)
É isso ai pessoal, tem alguns outros exemplos na documentação, mas com isso já dá para perceber o potencial desta lib.
Abraço a todos e até a próxima!

Nenhum comentário:

Postar um comentário