[python-brasil] Intervalo de Datas.

1,459 views
Skip to first unread message

Antonio Prado

unread,
Jun 14, 2011, 7:47:54 AM6/14/11
to python...@yahoogrupos.com.br
Tenho o seguinte período:
01/12/2010 - 31/12/2010

Preciso obter quais os meses que compreendem este período, da seguinte
forma:
01/01/2010 - 31/12/2010
01/02/2010 - 28/02/2010
...

Qual seria a forma mais "pythonica" de se fazer isto?

Obrigado.

Antonio.


[As partes desta mensagem que não continham texto foram removidas]

------------------------------------

Python-Brasil
http://www.python.org.br/wiki/AntesDePerguntar
Links do Yahoo! Grupos

<*> Para visitar o site do seu grupo na web, acesse:
http://br.groups.yahoo.com/group/python-brasil/

<*> Para sair deste grupo, envie um e-mail para:
python-brasi...@yahoogrupos.com.br

<*> O uso que você faz do Yahoo! Grupos está sujeito aos:
http://br.yahoo.com/info/utos.html


Maxwell Morais

unread,
Jun 14, 2011, 8:09:35 AM6/14/11
to python...@yahoogrupos.com.br
Meu caro Antonio, não consegui compreender o seu problema, você poderia
passar mais detalhes?

Você deseja saber, o nome dos meses? ou as quantidades de dias/semanas/meses
entre duas datas?

Em 14 de junho de 2011 08:47, Antonio Prado
<sup...@antonioprado.eti.br>escreveu:

>
>
> Tenho o seguinte período:
> 01/12/2010 - 31/12/2010
>
> Preciso obter quais os meses que compreendem este período, da seguinte
> forma:
> 01/01/2010 - 31/12/2010
> 01/02/2010 - 28/02/2010
> ...
>
> Qual seria a forma mais "pythonica" de se fazer isto?
>
> Obrigado.
>
> Antonio.
>
> [As partes desta mensagem que não continham texto foram removidas]
>
>
>

--

Maxwell Morais
(+55 11) 3774-1137
www.realizemodulados.com.br

Email - max.mor...@gmail.com
Agenda - *
http://www.google.com/calendar/embed?src=max.morais.dmm%40gmail.com&ctz=America/Sao_Paulo
*

thiagoc

unread,
Jun 14, 2011, 8:23:43 AM6/14/11
to python...@yahoogrupos.com.br
2011/6/14 Antonio Prado <sup...@antonioprado.eti.br>:

> Tenho o seguinte período:
> 01/12/2010 - 31/12/2010
>
> Preciso obter quais os meses que compreendem este período, da seguinte
> forma:
> 01/01/2010 - 31/12/2010
> 01/02/2010 - 28/02/2010

Não entendi muito bem sua pergunta, mas dê uma olhada no módulo
timedelta[0] e veja se resolve o seu problema.

[0] http://docs.python.org/library/datetime.html#datetime.timedelta


--
thiagoc

"O povo não deveria temer o governo. O governo é quem deveria temer o povo."
V de Vingança

Allison Vollmann

unread,
Jun 14, 2011, 8:26:18 AM6/14/11
to python...@yahoogrupos.com.br
É algo do tipo "faça meu dever de casa"?

Você precisa ter uma dúvida mais específica, assim não é nenhum crime. Vou considerar que você quer saber o ultimo dia do mês, uma forma mais pratica ao meu ver seria: 

from datetime import date, timedelta

date(2011, 2, 1) - timedelta(days=1)


Ou seja, pegar a data do primeiro dia do mês seguinte e diminuir por 1 dia, vai te retornar a data do último dia do mês anterior, para resolver o restante de seu problema com isso é só uma questão de lógica de programação.

Só lembrando que o histórico da lista fica arquivado e é indexado por buscadores, não há nenhum mal em ter dúvidas, mas pedir para alguém fazer o seu trabalho pode ser perigoso.


________________________________
De: Antonio Prado <sup...@antonioprado.eti.br>
Para: python...@yahoogrupos.com.br
Enviadas: Terça-feira, 14 de Junho de 2011 8:47
Assunto: [python-brasil] Intervalo de Datas.

Junior Polegato - Linux

unread,
Jun 14, 2011, 8:49:40 AM6/14/11
to python...@yahoogrupos.com.br
Em 14-06-2011 08:47, Antonio Prado escreveu:
> Tenho o seguinte período:
> 01/12/2010 - 31/12/2010
> Preciso obter quais os meses que compreendem este período, da seguinte
> forma:
> 01/01/2010 - 31/12/2010
> 01/02/2010 - 28/02/2010
> Qual seria a forma mais "pythonica" de se fazer isto?

Olá!

Use a classe datetime.date, função strptime para transformar
string em data e então year e month para calcular, exemplo:

import datetime
intervalo = "01/01/2010 - 31/12/2011"
inicio, fim = [datetime.datetime.strptime(data.strip(), '%d/%m/%Y') for
data in intervalo.split('-')]
meses = (fim.year - inicio.year) * 12 + fim.month - inicio.month + 1
print meses

Ainda por usar somente split():

intervalo = "01/01/2010 - 31/12/2010"
inicio, fim = [[int(x) for x in data.strip().split('/')] for data in
intervalo.split('-')]
meses = (fim[2] - inicio[2]) * 12 + fim[1] - inicio[1] + 1
print meses

Ou ainda, se quer calcular o número de dias e dividir por 30:

import datetime
intervalo = "01/01/2010 - 31/01/2011"
inicio, fim = [datetime.datetime.strptime(data.strip(), '%d/%m/%Y') for
data in intervalo.split('-')]
meses = (fim - inicio).days / 30
print meses

Observe que no caso acima retorna apenas a parte inteira da
divisão arredondado para baixo. Para ter um resultando com número real,
divida por `30.0´ e faça seu arredondamento, se for o caso.


[]'s
Junior Polegato

Reply all
Reply to author
Forward
0 new messages