Autor Tema: restar dos horas  (Leído 6825 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado ENO45

  • PIC10
  • *
  • Mensajes: 42
restar dos horas
« en: 18 de Enero de 2006, 22:00:00 »
hola lo que tengo que hacer y no tengo idea como es restar 2 horas que cargo en dos textbox para luego mostrarla en un tercer textbox como hago eso
lo que yo hice es esto pero no funciona a ver si me pueden ayudar


Private Sub Timer1_Timer()
Dim A As String
Dim B As String
Dim N As String
A = Text1.Text
B = Text2.Text
N = B - A
Text3.Text = N
End Sub

Desconectado Chaly29

  • Moderador Global
  • DsPIC33
  • *****
  • Mensajes: 4315
RE: restar dos horas
« Respuesta #1 en: 19 de Enero de 2006, 05:03:00 »
Hola ENO45, probaste de hacer esto:

Private Sub Timer1_Timer()
Dim A As String
Dim B As String
Dim N As String
A = val(Text1.Text)
B = val(Text2.Text)
N = B - A
Text3.Text = N
End Sub

Suerte

Atte. CARLOS
La teoría es cuando se sabe todo y nada funciona. La práctica es cuando todo funciona y nadie sabe por qué.

Desconectado ENO45

  • PIC10
  • *
  • Mensajes: 42
RE: restar dos horas
« Respuesta #2 en: 19 de Enero de 2006, 10:24:00 »
no eso no funciona, lo que tengo qhe restar son 2 horas (ej 22:01:00 - 22:02:00) y lo que me enviaste es para restare numeros enteros  

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
RE: restar dos horas
« Respuesta #3 en: 19 de Enero de 2006, 13:06:00 »
Hola. el VB  no puede restar Cadenas de texto que contengan caracteres no numericos ENO45!! fijate que en un formato de hora como hh:mm:ss los numeros enteros estan separados por ":".
Converti ambas horas(hh:mm:ss) a segundos y luego restalas. Al resultado volvelo a convertir al formato hh:mm:ss.

Para pasar de hh:mm:ss a segundos hace:

segundos = (cint(hh)*3600)+(cint(mm) * 60) + cint(ss)

Para pasar de segundos a hh:mm:ss hace:

hh = round(segundos / 3600)

mm = round((segundos - (hh*3600)) / 60)

ss = segundos - (hh*3600) - (mm*60)

Exitos
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.

Desconectado ENO45

  • PIC10
  • *
  • Mensajes: 42
RE: restar dos horas
« Respuesta #4 en: 19 de Enero de 2006, 16:08:00 »
disculpame pero no entiendo el programa como hago para cargar las horas, minutos y segundos  de cada textbox al programa

segundos = (cint(hh)*3600)+(cint(mm) * 60) + cint(ss)

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
RE: restar dos horas
« Respuesta #5 en: 19 de Enero de 2006, 18:56:00 »
Por ejemplo:

Tenes un Textbox. El formato de la hora DEBE ser de la siguiente manera:

hh:mm:ss

ok?

ejemplos:

12:21:34
07:15:04

Un metodo facil, pero esclavo y limitado a ese formato es este:

hh= left(TextHora1.Text,2)
mm=mid(TextHora1.Text,4,2)
ss = right(TextHora1.Text,2)

Si el usuario es quien ingresa las horas, minutos y segundos, te conviene comprobar que las horas ingresadas sean validas.

FIJATE QUE SI O SI , TANTO LAS horas(hh), minutos(mm) y segundos(ss) deben contener 2 cifras cada uno en este metodo. Sino el programa va a tirar error ya que se va a colar un ":" en alguno(o mas de uno) de los valores.

Hay casi infinitos metodos(o al menos a mi se me ocurren muchisimos) para hacer esto. Lo mas complejo de esto que queres hacer, creelo o no, es comprobar que tanto la hora ingresada como su formato son VALIDOS.

Exitos...

"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18310
    • MicroPIC
RE: restar dos horas
« Respuesta #6 en: 20 de Enero de 2006, 00:14:00 »
Hace mucho que no uso VB y es probable que diga alguna tontería, pero creo recordar que los campos de fecha y hora, si se asignan a una variable tipo VARIANT, toman un formato numérico con el que es muy fácil operar, ya que se puede restar o sumar directamente sobre él.

Desconectado ENO45

  • PIC10
  • *
  • Mensajes: 42
RE: restar dos horas
« Respuesta #7 en: 23 de Enero de 2006, 16:24:00 »
hola brunof me estas salvando de varias.
el ejemplo que me diste no funciona cuando la hora pasande las 09:00:00 dice error 6 desbordamiento ¿que sera? y otra cosa cuando por ejemplo pones la hora 06:30:30 cuanodo quiero volver a la hora me da otra hora segun lo que yo vi es que cunado redondea pasa a una hora mas grande como se soluciona este problema
desde ya muy agradecido por toda tus ayudas

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
RE: restar dos horas
« Respuesta #8 en: 23 de Enero de 2006, 17:59:00 »
Hola. el desbordamiento se produce porque declaraste la variable segundos como Integer. Declarala como Long

Dim segundos As Long

ok?

Con respecto a lo segundo:

Perdon, fue mi equivocacion. La funcion Round redonde hacia arriba si el numero excede la mitad del entero en el Vb...locolocoloco

Aca te va el codigo correcto:

Para pasar de la hora en el texto a segundos:

Dim hh As Integer
Dim mm As Integer
Dim ss As Integer

Dim Segundos As Long

hh = CInt(Left(TextHora1.Text, 2))
mm = CInt(Mid(TextHora1.Text, 4, 2))
ss = CInt(Right(TextHora1.Text, 2))
Segundos = (CInt(hh) * 3600) + (CInt(mm) * 60) + CInt(ss)


y para pasar de segundos a la hora:


hh = Fix(Segundos / 3600)

mm = Fix((Segundos - (hh * 3600)) / 60)

ss = Segundos - (hh * 3600) - (mm * 60)

TextHora1.text = hh & ":" & mm & ":" & ss

Exitos.
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.

Desconectado ENO45

  • PIC10
  • *
  • Mensajes: 42
RE: restar dos horas
« Respuesta #9 en: 23 de Enero de 2006, 20:23:00 »
con el error del desbordamiento sigue sucediendo lo mismo
dice : error 6 en tiempo de ejecucion
         desbordamiento
que puede ser y señana el error en la linea:
Segundos = (CInt(hh) * 3600) + (CInt(mm) * 60) + CInt(ss)

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
RE: restar dos horas
« Respuesta #10 en: 23 de Enero de 2006, 20:43:00 »
Si...esta produciendo un desbordamiento.

cambia esto:

Dim hh As Long
Dim mm As Long
Dim ss As Long

Segundos = (CLng(hh) * 3600) + (CInt(mm) * 60) + CInt(ss)

Exitos.
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.

Desconectado ENO45

  • PIC10
  • *
  • Mensajes: 42
RE: restar dos horas
« Respuesta #11 en: 24 de Enero de 2006, 00:37:00 »
anda un espectaculo lo unico tengo otro problema, cuando quiero pasar de segundos a hora me surge un problema es que por ejemplo me debuelve 3:10:0 en ves de 03:10:00 es que la quieo comparar con la hora actual y si no son iguales no hace nada
espero que se pueda solucionar.
(me parece que te estoy debiendo un par de cervezas por la ayuda)

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
RE: restar dos horas
« Respuesta #12 en: 24 de Enero de 2006, 06:16:00 »
Hola...no cobro tan caro!jaja pero te las acepto! Muchas risasMuchas risasSonrisa

Cambia esto:

TextHora1.text = hh & ":" & mm & ":" & ss

Por esto:

If hh < 10 Then TextHora1.Text = "0" & hh & ":" Else TextHora1.Text = hh & ":"

If mm < 10 Then TextHora1.Text = TextHora1.Text & "0" & mm & ":" Else TextHora1.Text = TextHora1.Text & mm & ":"

If ss < 10 Then TextHora1.Text = TextHora1.Text & "0" & ss Else TextHora1.Text = TextHora1.Text & ss


Los que continua a los Else va todo en el mismo renglon. Aca pasan abajo porque no entra...loco pero en el Vb solamente te tiene que quedar de 3 renglones este codigo... Exitos.
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
RE: restar dos horas
« Respuesta #13 en: 24 de Enero de 2006, 07:50:00 »
Como te decia...en el editor no entraba, pero de vago no le di vista previa...entran sin problemas...Flash tonces hacele caso omiso a mi comentario.
Exitos
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.

Desconectado ENO45

  • PIC10
  • *
  • Mensajes: 42
RE: restar dos horas
« Respuesta #14 en: 24 de Enero de 2006, 09:30:00 »
anda joya muchas gracias