problema con fechas

Iniciado por Mr.Chispa, 9 Septiembre 2006, 05:15 AM

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

Mr.Chispa

hola:
tengo el siguiente problema, tengo una variable q guarda la cantidad de segundos q tarda x cosa, necesito saber a cuantas horas, minutos y segundos equivale eso.
ej: tengo la variable a=130 q equivale a decir 0:2:10 pero cuando le tiro a=102000 q equivale a decir 28:21:18.
cuando lo quiero pasar con cdate me tira error.
¿que puedo hacer? :huh:

karmany

Te paso un código que hice en un programa mío muy sencillo.
Te lo paso con a = 102000 segundos.

Por cierto tu respuesta: 102000 -> 28 h. 21 min. 18 seg. es incorrecta. El resultado es 28 horas con 20 minutos ya que:
28 h. * 3600 = 100800 segundos
20 min. * 60 =    1200 segundos
Sumando: 100800 + 1200 = 102000 segundos.

Pon solamente un textbox en un formulario para que veas el resultado. El código es el siguiente:


Private Sub Form_Load()
  Dim a As Long
  a = 102000 'El tiempo para Convertir_tiempo en segundos.!
  Text1.Text = Convertir_tiempo(a)
End Sub

Public Function Convertir_tiempo(ByRef duracion As Long) As String

        Dim Tmp As Long
        Dim Horas As Long
        Dim Minutos As Long
        Dim Segundos As Long

        On Error Resume Next

        Tmp = duracion

        Horas = Int(Tmp / 3600)
        Tmp = Tmp - (Horas * 3600)

        Minutos = Int(Tmp / 60)
        Tmp = Tmp - (Minutos * 60)

        Segundos = Tmp

        Convertir_tiempo = ""
        If Horas > 0 Then Convertir_tiempo = Format(Horas, "00") & ":"
        Convertir_tiempo = Convertir_tiempo & Format(Fix(Minutos), "00") & ":"
        Convertir_tiempo = Convertir_tiempo & Format(Fix(Segundos), "00")

    End Function



Mr.Chispa

ya lo pude resolver, de la forma bruta pero funciona, el problema era q cuando le queria suma a la hora actual "28:20:00" me tiraba error. lo q hize fue eso:

Private Sub Form_Load()
    Dim a As Long
    a = 102000 'El tiempo para Convertir_tiempo en segundos.!
    ahora = Now
    For i = 1 To a
        ahora = ahora + CDate("00:00:01")
    Next
    Text1.Text = ahora
End Sub

saludos y gracias por la ayuda  ;D

Mr.Chispa

PD: tarda un poco en hacerlo pero si conoces alguna forma mejor decime  ;)

karmany

Mira, a ver si te entiendo esto último.. intentas sumas a la fecha actual los 102000 segundos no??

Eso que haces de ese modo es bastante feo.

Si quieres añadir a una fecha un número determinado de segundos, por ej. en este caso 102000, lo puedes hacer muchísimo más sencillo de esta forma:
Private Sub Form_Load()
    Dim a As Double
    'Le pongo double porque en la definición de DateAdd:
    'DateAdd (Interval as String, Number as Double, Date)
    a = 102000 'segundos

    'Ahora a la fecha actual le sumo los 102000 segundos:
    Text1.Text = DateAdd("s", a, Now)

End Sub


Si quieres más información sobre DateAdd, MSDN:
http://msdn2.microsoft.com/es-es/library/hcxe65wz.aspx

Hans el Topo

#5
yo nose si kieres sumarle a la fecha actual x segundos (para eso hay una función especiquica) o quieres simplemente convertir x segundos a horas minutos segs... eso se hace asi mismamente...

const SEGUNDOS_HORA=3600
const SEGUNDOS_MINUTO=60

dim a as long   
dim horas as integer
dim minutos as integer
dim segundos as integer

....
'aki puedes crearte una función que devuelva el valor  del finaly  listo
a=total segundos
'sacamos las horas
horas=a / SEGUNDOS_HORA
a=a MOD horas
'sacamos los minutos
minutos=a/SEGUNDOS_MINUTO
a=a MOD minutos
'sacamos los segundos
segundos=a

text1.text=format(horas,"00") & format(minutos,"00") & format(segundos,"00")


 

Mr.Chispa

#6
DateAdd es lo q necesitaba ;D.
ya se, es algo medio raro lo q quiero hacer, gracias por la ayuda
saludos