[python-brasil] Somar Datas

985 views
Skip to first unread message

Guedes

unread,
Jul 4, 2005, 7:20:12 PM7/4/05
to python...@yahoogrupos.com.br
Olá Lista,
Segue abaixo uma rotina para somar datas.
Agradecimento ao Antonio Prado, Douglas e Night Blind Walker.
Quem souber melhor essa rotina, favor responder esse email.

def somar_data(data= '2005-07-04', dias= 0):
'''
Uso: somar_data(data, dias)
data -> data no formato 'ano-mes-dia'
dias -> dias de acréscimo

Retorna a data com acréscimo
'''

data= datetime.date(int(data[:4]), int(data[5:7]), int(data[-2:]))
acrescimo= datetime.timedelta(int(dias))
return str(data + acrescimo)

--
Abraços,

Guedes.

============================================
*** Nada é Impossível, Apenas Improvável ***
*** Seja Livre, Use GNU/Linux ***

UIN-> 177815213
E-MAIL'S:
PHP-> billgue...@terra.com.br
OUTROS-> billg...@ig.com.br
PYTHON-> billgued...@terra.com.br
POSTGRES -> billguede...@terra.com.br
EMPRESAS-> billg...@terra.com.br
GNU/LINUX-> billgued...@terra.com.br

SISTEMA: Debian GNU/Linux - Kernel 2.4.27


===============================================================

Antes de enviar sua mensagem dê uma lida em:

http://www.pythonbrasil.com.br/moin.cgi/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


Washington Coutinho Corrêa Junior

unread,
Jul 5, 2005, 9:15:21 AM7/5/05
to python...@yahoogrupos.com.br
"""Estou tentando fazer uma função para calcular a diferença (ou o tempo
decorrido) entre duas horas, i.e., dois objetos time."""

Você tem que utilizar objetos timedelta para isso. Veja um exemplo:

<code>

import datetime

tempo1 = datetime.time(13, 10, 2)
tempo2 = datetime.time(13, 20, 2)

h1 = datetime.timedelta(hours=tempo1.hour, minutes=tempo1.minute,
seconds=tempo1.second)
h2 = datetime.timedelta(hours=tempo2.hour, minutes=tempo2.minute,
seconds=tempo2.second)

diferenca = h2-h1

print h1
print h2
print diferenca

</code>

Certo? ;)

Junior (http://www.gs.kitbr.com/)
"Foi o que me perdeu; porque, mergulhado na lama, eu me consolava sonhando
que em outros instantes era um herói, e o herói iluminava a lama com o seu
prestígio: é proibido ao homem comum mergulhar no charco; mas o herói, esse
está situado tão alto que não poderá jamais se sujar completamente; então eu
posso me afundar no lodo." (Dostoiévski em 'Memórias do Subsolo')

Guedes

unread,
Jul 5, 2005, 11:16:48 AM7/5/05
to python...@yahoogrupos.com.br
Olá Marcos Mendonça,
Segue abaixo o código que vc precisa.

import datetime, string
def hora_decorrente(inicio= '11:23', termino= '13:46'):
hora_inicial= datetime.datetime(2005, 07, 05, int(inicio[:2]),
int(inicio[-2:]))
hora_final= datetime.datetime(2005, 07, 05, int(termino[:2]),
int(termino[-2:]))
decorrencia= string.split(str(hora_final - hora_inicial), ':')
return str(decorrencia[0]) + ':' + str(decorrencia[1])

hora= hora_decorrente('12:12', '18:05')

print 'Passou %s horas' % hora

Osvaldo Santana

unread,
Jul 5, 2005, 12:32:26 PM7/5/05
to python...@yahoogrupos.com.br
Só pra dar uma dica pra vocês:

https://moin.conectiva.com.br/DateUtil

É um módulo que trabalha com datas que foi desenvolvido pelo Gustavo Niemeyer...

Osvaldo

On 7/5/05, Marcos Mendonça <mar...@gmail.com> wrote:
> É isso mesmo
[corta]

--
Osvaldo Santana Neto (aCiDBaSe)
icq, url = (11287184, "http://www.pythonbrasil.com.br")

Washington Coutinho Corrêa Junior

unread,
Jul 7, 2005, 9:56:17 AM7/7/05
to python...@yahoogrupos.com.br
"""O que eu quero dizer é que, poderia haver um parêmetro para retornar o
datetime.timedelta na unidade que se quisesse (horas, dias, segundos,
etc.)."""

Sim, de fato seria muito bom ter isso. Mas, realmente eu não achei nada
nesse sentido.

"""Mas, num teria um jeito mais 'pythonico'?"""

Eu acho que isso aqui seria mais pythônico:

<code>
import datetime

class TimeDelta(datetime.timedelta):
def hours(self):
dias, horas = str(self).split(",")
dias = int(dias.strip("days").strip("day").strip())
horas = horas.strip()
h, m, s = horas.split(":")
h = str(int(h) + (dias * 24)).zfill(2)
return "%s:%s:%s" % (h, m, s)
</code>

Com essa subclasse os métodos e atributos de datetime.timedelta estão sendo
aproveitados e estamos ainda incluindo mais um método chamado hours() que
retornará o desejado. Um exemplo de utilização:

<code>
k = TimeDelta(hours=42, minutes=36)
print k
print k.hours()
</code>

Pode-se ainda criar métodos equivalentes para outras medidas de tempo.

Certo? ;)

Junior (http://www.gs.kitbr.com/)
"Os fatos não deixam de existir por serem ignorados." (Aldous Huxley)

On 7/6/05, Washington Coutinho Corrêa Junior <w...@openlink.com.br> wrote:
> """Agora continuo com uma pequena dúvida, e não consegui encontrar a
> resposta na documentação.
>
> Tenho um objeto datetime.timedelta. Se faço algo como
>
> >>> print horas
> 1 day, 18:36:00
>
> Gostaria de imprimir na verdade do total de horas em horas, no caso:
> 42:36:00.
> Como posso fazer isso?"""
>
> Basta você multiplicar a quantidade de dias por 24 e somar com as horas do
> horário que está depois da vírgula. Aí vai uma função que faz isso:
>
> <code>
>
> def tempototal(t):
> dias, horas = str(t).split(",")
> dias = int(dias.strip("day").strip("days").strip())
> horas = horas.strip()
> h, m, s = horas.split(":")
> h = str(int(h) + (dias * 24)).zfill(2)
> return "%s:%s:%s" % (h, m, s)
>
> </code>
>
> Exemplo de utilização:
>
> <code>
>
> k = datetime.timedelta(hours=42, minutes=36)
> print k
> print tempototal(k)


>
> </code>
>
> Certo? ;)
>
> Junior (http://www.gs.kitbr.com/)

> "Quando você entender porque rejeita todos os outros deuses exceto o seu,
> você entenderá porque eu rejeito todos os deuses." (Stephen F. Roberts)

Reply all
Reply to author
Forward
0 new messages