none
Como calcular la diferencia de horas y minutos en .NET de dos fechas?

    Pregunta

  • Holas,

    necesito la diferencias de horas y minutos por ejemplo:

    Tengo 13:02:03 pm  y 14:05:01 pm

    deberia tener 1:03:01

    estuve usando el datediff pero no sale lo que requiero

      be.VarDuracion = (DateDiff(DateInterval.Minute, mdteFechaHora, Now)).ToString

     

    me recupera los minutos,pero cuando va de más de una hora no,funciona,no me retorna lo real

    que podria hacer.

    Slds.
    Estudiante_Sistemas
    miércoles, 04 de agosto de 2010 17:10

Respuestas

  •  

    hola

    bien ahora sabemos que la hora la tomas de la db

    has probado usando el

    Dim fecha1 As DateTime = DateTime.Parse("13:02:03")

    pero con el pm incluido ? o sea

    Dim fecha1 As DateTime = DateTime.Parse("13:02:03 PM")

    si lo hace esta fallando el codigo ?

    igual creo que el formato no usa el punto, es solo PM en mayusculas

     

    sino reemplazalo

    Dim hora As String = "13:02:03 p.m."

    Dim fecha1 As DateTime = DateTime.Parse(fecha.Replace("p.m.", ""))

     

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    • Marcado como respuesta Rosita_Lima miércoles, 04 de agosto de 2010 20:44
    miércoles, 04 de agosto de 2010 19:53

Todas las respuestas

  • "Rosita_Lima" escribió:

    > necesito la diferencias de horas y minutos por ejemplo:
    >
    > Tengo 13:02:03 pm  y 14:05:01 pm
    >
    > deberia tener 1:03:01

    ¡Bueno! Yo creo que la diferencia sería de 01:02:58. :-)

    Utiliza objetos TimeSpan para calcular diferencias horarias:

            Dim horaInicial As New TimeSpan(13, 2, 3)
            Dim horaFinal As New TimeSpan(14, 5, 1)

            Dim diferencia As TimeSpan = horaFinal.Subtract(horaInicial)


            Dim msg As String = _
                String.Format("{0:00}:{1:00}:{2:00}", _
                diferencia.Hours, diferencia.Minutes, diferencia.Seconds)

            MessageBox.Show(msg)

    Un saludo

     


    Enrique Martínez [MS MVP - VB]
    miércoles, 04 de agosto de 2010 17:46
  • hola

    podrias hacer

     

    Dim fecha1 As DateTime = DateTime.Parse("13:02:03")

    Dim fecha2 As DateTime = DateTime.Parse("14:05:01")

    Dim hora As TimeSpan = fecha2.Substract(fecha1)

    Dim resultado As String = String.Format("{0}:{1}:{2}", hora.Hours, hora.Minutes, hora.Seconds)

     

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    miércoles, 04 de agosto de 2010 17:51
  • "Leandro Tuttini" escribió:

    > podrias hacer
    >
    > Dim fecha1 As DateTime = DateTime.Parse("13:02:03")
    >
    > Dim fecha2 As DateTime = DateTime.Parse("14:05:01")
    >
    > Dim hora As TimeSpan = fecha2.Substract(fecha1)
    >
    > Dim resultado As String = String.Format("{0}:{1}:{2}", hora.Hours, hora.Minutes, hora.Seconds)

    ¡Lo tuyo es grande! ¿No crees que tu propuesta es más complicada que la que yo le he ofrecido?

    Simplemente es cuestión de utilizar tipos Integer para representar las horas, minutos y segundos, en lugar de utilizar una cadena alfanumérica que tienes que convertir a DateTime mediante su método Parse.

    ¿Por qué motivo hay que utilizar estructuras DateTime cuando se puede hacer más sencillo utilizando estructuras TimeSpan para representar INTERVALOS DE TIEMPO? Digo yo que para algo se inventaron la estructura TimeSpan.

    Por cierto, el método correcto es Subtract no "Substract". ;-) 

     


    Enrique Martínez [MS MVP - VB]
    miércoles, 04 de agosto de 2010 18:30
  • el método correcto es Subtract no "Substract"

    ups si un erro de tipeo, gracias por marcarlo, edito el post

    ¿No crees que tu propuesta es más complicada que la que yo le he ofrecido?}

    mmm, no se, depende de lo que se necesite, yo veo bien las dos formas, ambas son validas

    por ahi si la hora la obtiene de una db y no quiere separar cada parte para armaer el timespan le resulte mas simple parsear a datetime, no se digo, por mi parte ofresco una respeusta que me parece valida despues quien consulto marcara si le sirvio o no, por ahi tengas razon y marque tu repuesta, lo cual es valido

    saludos

     


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    • Propuesto como respuesta Dampir miércoles, 04 de agosto de 2010 19:17
    miércoles, 04 de agosto de 2010 18:36
  • "Leandro Tuttini" escribió:

    > mmm, no se, depende de lo que se necesite, yo veo bien
    > las dos formas, ambas son validas
    >
    > por ahi si la hora la obtiene de una db y no quiere separar
    > cada parte para armaer el timespan le resulte mas simple
    > parsear a datetime, no se digo, por mi parte ofresco una
    > respeusta que me parece valida despues quien consulto marcara
    > si le sirvio o no, por ahi tengas razon y marque tu repuesta,
    > lo cual es valido

    ¡Ah! Disculpa entonces, porque se me había olvidado que tú te adelantas a los acontecimientos. Tú, presupones por adelantado que "la hora la obtiene de una base de datos y que no quiere separar cada parte para armar el timespan".

    Ves, yo no soy así, porque en mis repuestas me ciño a lo que EXACTAMENTE pregunta el usuario. ¡Ni más ni menos! ;-)

     


    Enrique Martínez [MS MVP - VB]
    miércoles, 04 de agosto de 2010 18:48
  • ok,gracias pero tengo un PROBLEMA,la hora que me retorna del servidor me viene asi:

    03:38:49 p.m.

     

    como puedo hacer en visual,para solo tomar como valor solo 03:38:49 sin el p.m ,en sql,haria un left,cual es su equivalente en visual,quiero quitarle eso.

    Gracias.

     


    Estudiante_Sistemas
    miércoles, 04 de agosto de 2010 19:48
  •  

    hola

    bien ahora sabemos que la hora la tomas de la db

    has probado usando el

    Dim fecha1 As DateTime = DateTime.Parse("13:02:03")

    pero con el pm incluido ? o sea

    Dim fecha1 As DateTime = DateTime.Parse("13:02:03 PM")

    si lo hace esta fallando el codigo ?

    igual creo que el formato no usa el punto, es solo PM en mayusculas

     

    sino reemplazalo

    Dim hora As String = "13:02:03 p.m."

    Dim fecha1 As DateTime = DateTime.Parse(fecha.Replace("p.m.", ""))

     

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    • Marcado como respuesta Rosita_Lima miércoles, 04 de agosto de 2010 20:44
    miércoles, 04 de agosto de 2010 19:53
  • "Rosita_Lima" preguntó:

    > la hora que me retorna del servidor me viene asi:
    >
    > 03:38:49 p.m.
    >
    > como puedo hacer en visual,para solo tomar como valor solo 03:38:49 sin el p.m

    Rosita, ésta pregunta es MUY DIFERENTE a la del asunto de tu mensaje inicial, que te recuerdo era «Como calcular la diferencia de horas y minutos en .NET de dos fechas?».

    Creo que poco tiene que ver calcular una diferencia horaria con eliminar la parte P.M o A.M de una hora que te devuelve el servidor. :-)

    Si los caracteres PM o AM se encuentran separados del final de la hora por un espacio en blanco, una posible solución sería conocer el índice del primer espacio en blanco existente en la cadena alfanumérica, para quedarnos sólo con la parte de la hora:

           Dim hora As String = "03:38:49 p.m."

            ' Buscamos el primer espacio en blanco.
            '
            Dim n As Integer = hora.IndexOf(" "c, 0)

            ' Eliminamos los caracteres AM o PM, con independencia
            ' que aparezcan separados con un punto o cualquier
            ' otro carácter.
            '
            hora = hora.Substring(0, n)

            Dim dt As DateTime

            DateTime.TryParse(hora, dt)

            MessageBox.Show(dt.ToString("HH:mm:ss"))

     


    Enrique Martínez [MS MVP - VB]
    miércoles, 04 de agosto de 2010 20:40
  • "Leandro Tuttini" escribió:

    > bien ahora sabemos que la hora la tomas de la db

    ¡Sí señor! A eso se le llama tener una buena "bola de cristal". Lo demás es tontería. :-))

     

     

     

     


    Enrique Martínez [MS MVP - VB]
    miércoles, 04 de agosto de 2010 20:42
  • Gracias,sirvio,fue tal como dices.

     


    Estudiante_Sistemas
    miércoles, 04 de agosto de 2010 20:44
  • Otra alternativa sería utilizar un objeto DateTimeFormatInfo para especifcar el formato AM y PM:

           Dim dtfi As DateTimeFormatInfo = New CultureInfo("es-ES", False).DateTimeFormat

            ' Designamos los valores que forman las horas
            ' que son AM y PM.
            '
            dtfi.AMDesignator = "a.m"
            dtfi.PMDesignator = "p.m"

            Dim hora As String = "03:38:49 p.m."

            Dim dt As DateTime

            DateTime.TryParse(hora, dtfi, DateTimeStyles.None, dt)

            MessageBox.Show(dt.ToString("HH:mm:ss"))

     


    Enrique Martínez [MS MVP - VB]
    miércoles, 04 de agosto de 2010 20:54