Python - Consulta con Suma y Resta de Horas

 
Vista:
sin imagen de perfil

Consulta con Suma y Resta de Horas

Publicado por Santiago (3 intervenciones) el 25/11/2016 19:56:26
Estimados! Buenas!

Mi nombre es Santiago. Tengo la siguiente consulta. En mi trabajo, estamos marcando la hora de ingreso. Debemos estar 7 horas con 30 minutos.. Por ende, he logrado, saber cuanto tiempo transcurrio desde que ingrese hasta el momento de ejecutar el programa. Pero tengo problemas para saber cuando falta para completar las 7 horas con 30 minutos!

Tengo problemas de formato.

Me pueden ayudar? Mas que nada explicar.


Gracias!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#!/usr/bin/python
 
import datetime
 
h = input("\nIngrese Hora de Ingreso: ")
m = input("\nIngrese Minutos de Ingreso: ")
 
d1 = datetime.datetime.now()
d2 = datetime.timedelta(hours=h,minutes=m)
d3 = datetime.timedelta(hours=07,minutes=30,seconds=00)
 
result = d1 - d2
 
print "\nUd. hace " + result.strftime('%H:%M:%S') + " que ingreso a la Cia."
 
print d3
print result.timedelta

Este es mi codigo!

Entiendo que tengo que hacer lo siguiente! d3 - result...Pero tengo que formattear 1 de ambos para realizar la operacion. No se como hacelo!

Gracias!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de kip
Val: 1.120
Bronce
Ha mantenido su posición en Python (en relación al último mes)
Gráfica de Python

Consulta con Suma y Resta de Horas

Publicado por kip (257 intervenciones) el 25/11/2016 23:27:41
Hola, estas mostrando mal las horas resultantes que quedan de ese modo, como lo haces ahora en lugar de obtener la diferencia de horas y minutos estas obteniendo un objeto TIME y en realidad lo que deberias obtener es un objeto TIMEDELTA que es la diferencia entre dos objetos DATETIME.

Aqui te dejo algo que he hecho para ver si es lo que necesitas.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
import datetime
 
h = input("\nIngrese Hora de Ingreso: ")
m = input("\nIngrese Minutos de Ingreso: ")
 
#CREAMOS UN OBJETO DATETIME QUE SERA LA FECHA Y HORA ACTUAL 
hoy = datetime.datetime.now()
#CREAMOS UN OBJETO DATETIME QUE SERA LA FECHA Y HORA DE LA ENTRADA DEL TRABAJO
#EN ESTE CASO COLOCAMOS EL AÑO, MES Y DIA ACTUAL
#LO UNICO QUE SERA VARIABLE SERAN LAS HORAS Y MINS QUE SE INGRESARAN
hora_entrada = datetime.datetime(hoy.year, hoy.month, hoy.day, hour=h, minute=m)
#CREAMOS UN OBJETO TIMEDELTA
#SERAN LAS HORAS Y MINS DE TRABAJO A REALIZARSE
horas_salida = datetime.timedelta(hours=7,minutes=30)
#OBTENEMOS UN OBJETO DATETIME DE LA SUMA DE LAS HORAS DE TRABAJO A REALIZARSE A LA HORA DE ENTRADA 
salida = hora_entrada + horas_salida
 
#CALCULAMOS LAS HORAS TRANSCURRIDAS A PARTIR DE LOS SEGUNDOS DE LA HORA ACTUAL MENOS LA HORA DE ENTRADA
#LA RESTA ENTRE AMBAS NOS DA UN OBJETO TIMEDELTA DEL CUAL ES POSIBLE OBTENER LOS SEGUNDOS EXACTOS DE DIFERENCIA
#ESTO LO DIVIDIMOS PARA 3600 Y OBTENEMOS LAS HORAS DE DIFERENCIA
horas_transcurridas_entrada =  (hoy - hora_entrada).total_seconds() // 3600
#PARA OBTENER LOS MINS ES IGUAL, PERO EN ESTE CASO PRIMERO OBTENEMOS EL RESIDUO DE LA DIVISION
#CON SEGUNDOS Y LUEGO DIVIDIMOS PARA 60
mins_transcurridos_entrada =  ((hoy - hora_entrada).total_seconds() % 3600) // 60
 
#AQUI LO QUE HACEMOS PARA OBTENER LA DIFERENCIA DE HORAS ES RESTAR LA SALIDA QUE HABIAMOS CALCULADO ANTES
#CON LA HORA ACTUAL, DE ESA FORMA OBTENEMOS YA SEA UN NUM POSITIVO O NEGATIVO
#ESTO VA A DEPENDER SI FALTAN O SOBRAN HORAS
#AL IGUAL QUE EN EL CASO ANTERIOR SE OBTIENE UN OBJETO TIMEDELTA DEL CUAL SACAREMOS LOS SEGS EXACTOS DE DIFERENCIA Y CONSEGUIMOS LAS HORAS
horas_restantes_salida = (salida - hoy).total_seconds() // 3600
mins_restantes_salida = ((salida - hoy).total_seconds() % 3600 ) // 60
 
if  horas_transcurridas_entrada > 1:
  print "\nUd. hace %.0f horas y %.0f minutos que ingreso a la Cia." % (horas_transcurridas_entrada, mins_transcurridos_entrada)
else:
  print "\nUd. hace %.0f hora y %.0f minutos que ingreso a la Cia." % (horas_transcurridas_entrada, mins_transcurridos_entrada)
 
if horas_restantes_salida > 1:
  print "\nLe quedan %.0f horas y %.0f mins para culminar la jornada" % (horas_restantes_salida, mins_restantes_salida)
elif horas_restantes_salida == 1:
  print "\nLe quedan %.0f hora y %.0f mins para culminar la jornada" % (horas_restantes_salida, mins_restantes_salida)
else:
  print "\nUsted hace %.0f horas y %.0f mins culmino la jornada" % (abs(horas_restantes_salida), abs(mins_restantes_salida))

Ten en cuenta que para obtener la diferencia entre una fecha y otra, incluyendo horas y minutos, el objeto TIMEDELTA siempre va a ser imprescindible.

Para calcular cuanto falta para terminar las horas laborables, he hecho una resta entre la hora actual y la posible hora a finalizar la jornada (esta es la suma de las 7 hrs y 30 mins con la hora de entrada) y verifico si es positivo o negativo, si es positivo entonces faltan horas, caso contrario los numeros negativos representaran hace cuanto finalizo la jornada.

Quizas haya alguna mejor manera de calcularlo, pero aqui te dejo a ver si te guias, mejoras o usas el codigo.

Nos cuentas si te ha servido,
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar
sin imagen de perfil

Consulta con Suma y Resta de Horas

Publicado por Santiago (3 intervenciones) el 25/11/2016 23:33:19
Mil gracias! Kip! Deje el código en el trabajo! Apenas lo vuelva a agarrar, con lo que me has dicho, investigare mas! Muchas gracias por tomarte este tiempo!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar