elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Recuerda que debes registrarte en el foro para poder participar (preguntar y responder)


+  Foro de elhacker.net
|-+  Programación
| |-+  Scripting
| | |-+  Sumar y restar horas en Python
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Sumar y restar horas en Python  (Leído 22,944 veces)
PUAROT

Desconectado Desconectado

Mensajes: 86



Ver Perfil WWW
Sumar y restar horas en Python
« en: 5 Junio 2016, 20:48 pm »

Después de mucho tiempo buscando como poder restar horas con un formato dado, lo encontré y me funciona, pero mi sorpresa llega cuando veo que para la suma no funciona :-(

Pongo el código de la resta para que lo veáis, y así si alguien busca Restar Horas le ayude:

Código:
def restar_hora(self,hora1,hora2):
        formato = "%H:%M:%S"
        h1 = datetime.strptime(hora1, formato)
        h2 = datetime.strptime(hora2, formato)
        resultado = h1 - h2
        return str(resultado)


Este código, al escribir:
Código:
restar_hora("10:30:50","09:20:30")

devuelve :
Código:
'1:10:20'

Lo que no entiendo es por que este otro código no funciona :
Código:
def sumar_hora(self,hora1,hora2):
        formato = "%H:%M:%S"
        h1 = datetime.strptime(hora1, formato)
        h2 = datetime.strptime(hora2, formato)
        resultado = h1 + h2
        return str(resultado)

este código devuelve el error :
Código:
TypeError: unsupported operand type(s) for +: 'datetime.datetime' and 'datetime.datetime'

Alguna idea de por que pasa y como solucinarlo ?


En línea

engel lex
Moderador Global
***
Desconectado Desconectado

Mensajes: 15.514



Ver Perfil
Re: Sumar y restar horas en Python
« Respuesta #1 en: 5 Junio 2016, 21:07 pm »

el operando "+" no aplica entre horas, necesitas timedelta

http://stackoverflow.com/questions/100210/what-is-the-standard-way-to-add-n-seconds-to-datetime-time-in-python


En línea

El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.
PUAROT

Desconectado Desconectado

Mensajes: 86



Ver Perfil WWW
Re: Sumar y restar horas en Python
« Respuesta #2 en: 7 Junio 2016, 09:39 am »

Gracias por responder,

No entiendo el motivo por el cual se pueden restar y no sumar, pero bueno, es así, que le vamos a hacer....

he estado mirando el enlace que me pusiste y he estado buscando sobre timedelta, pero mi ingles medio tirando a básico y el estar empezando con Python, no me han ayudado mucho.
He encontrado que se le pueden sumar segundos y días a una fecha y hora dada, pero no llego a ver en que formato tiene que estar esa hora... .
Me explico , yo tengo la hora en formato 00:00:00 y necesito el resultado en ese formato. Si necesito cambiar ese formato para sumar y volver a cambiar el formato para usarlo después, no me importa, pero no se como utilizar timedelta.

Podrías darme algunas nociones ? no pido que me lo hagan, si no aprender como resolver esta cuestión, ya que es la forma en la que estoy aprendiendo este lenguaje, con tutoriales y prueba error, lo cual a veces es desesperante.

Gracias otra vez !
En línea

tincopasan


Desconectado Desconectado

Mensajes: 1.286

No es lo mismo conocer el camino que recorrerlo.


Ver Perfil
Re: Sumar y restar horas en Python
« Respuesta #3 en: 7 Junio 2016, 15:41 pm »

hola:
perdón x lo que te diré pero debo hacerlo:
todos estamos aprendiendo, más o menos pero lo hacemos.
Muchos somos autodidactas, o sea de la misma forma que vos, manuales, prueba y error.
Si un enlace no te ayuda demasiado, pero estas orientado en lo que buscas, pues para eso existen los buscadores.
Lo del inglés ya no sirve como excusa(mi nivel es 0,0) pero... hay muchos traductores online o en soft.lamentablemente es el idioma más usado en cuanto a manuales, por eso si hago (tutorial o soft) solo lo hago en español, es mi lenguaje natal y si otro quiere leerlo pues que sepa español.
Ahora en cuanto a tu duda, hay muchas formas de hacerlo (eso es lo que más me gusta de python) así que te oriento en una.
Código
  1. # para usar timedelta hay que importarla
  2. from datetime import datetime, timedelta
  3.  
  4. def sumar_hora(hora1,hora2):
  5.    formato = "%H:%M:%S"
  6.    lista = hora2.split(":")
  7.    hora=int(lista[0])
  8.    minuto=int(lista[1])
  9.    segundo=int(lista[2])
  10.    h1 = datetime.strptime(hora1, formato)
  11.    dh = timedelta(hours=hora)
  12.    dm = timedelta(minutes=minuto)          
  13.    ds = timedelta(seconds=segundo)
  14.    resultado1 =h1 + ds
  15.    resultado2 = resultado1 + dm
  16.    resultado = resultado2 + dh
  17.    resultado=resultado.strftime(formato)
  18.    return str(resultado)
  19.  
  20. print(sumar_hora("01:30:50","04:20:30"))
  21.  
  22.  

por último te aclaro que estás sumando fechas, o sea que 20 hs + 06 hs no es 26 sino 02 del día siguiente, por eso el ejemplo no llega ni cerca a más de 24hs(tiempo límite para el cambio)
Espero no ofenderte y si orientarte.
Saludos.
En línea

PUAROT

Desconectado Desconectado

Mensajes: 86



Ver Perfil WWW
Re: Sumar y restar horas en Python
« Respuesta #4 en: 9 Junio 2016, 11:16 am »

Ante todo GRACIAS por la respuesta.

En segundo lugar te diré que escribí la pregunta y la siguiente contestación pensando precisamente en que no me contestaran este tipo de cosas, por que se que hay mucha gente (yo mismo he caído alguna vez en ese error) que pregunta en los foros sin buscar y para que se lo den todo hecho...
Efectivamente todos estamos aprendiendo, y el que crea que no tiene un autentico problema jejeje
Respecto a lo de autodidacta, lo aclaraba simplemente por aclarar que no estoy dando clases y pretendo que me den los ejercicios resueltas, como en alguna ocasión he visto....  y que esta es mmi única forma de resolver las dudas, ya que la documentación que encuentro muchas veces está escrita para gente con mucho mas nivel, por ejemplo, lo de timedelta, los docstring están escritos para alguien que ya se mueve con soltura en el uso del lenguaje, o eso me parece a mi...
Lo del ingles para nada es una excusa, todo lo contrario , me esta sirviendo para ampliar el vocabulario, pero me cuesta entender , el problema de los traductores, (que los uso ) es que como el lenguaje también está escrito en ingles te traduce comando que seria mejor que dejara en ingles por lo que hay que filtrar muy bien y aun así no siempre sirven de ayuda.
Con todo esto, entiendo perfectamente tus comentarios, por que muchos van a lo fácil.
En mi caso se que podria haber descompuesto las horas en tuplas y anidando if hubiera encontrado la forma de hacerlo ( a lo bestia ) pero mi idea es aprender a usar las herramientas de las que dispongo
Sigo sin entender por que puedo restar horas y no sumarlas, ya que es algo de lo mas natural, hay países con horas de diferencia positivas y negativas, por ejemplo....
Estudiaré el ejemplo que me has puesto para ver si me queda claro el uso de timedelta
Muchas gracias otra vez, y perdón por la parrafada, simplemente quería aclarar que lo que quiero es aprender.
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Restar y sumar columas de una base de datos.
Programación Visual Basic
erick185 0 1,950 Último mensaje 20 Febrero 2006, 06:17 am
por erick185
Restar dos horas
PHP
Kizar 2 7,680 Último mensaje 1 Abril 2007, 02:35 am
por Kizar
ayuda con mi base de datos acces,datagrid sumar y restar columnas o filas
Programación Visual Basic
angelrobi 1 8,828 Último mensaje 19 Diciembre 2009, 04:05 am
por seba123neo
restar horas
PHP
kakashi20 1 2,996 Último mensaje 30 Enero 2012, 17:55 pm
por satu
restar horas
PHP
kakashi20 0 2,462 Último mensaje 15 Marzo 2012, 21:44 pm
por kakashi20
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines