none
¿Cómo puedo obtener una cadena de tiempo con el siguiente formato? RRS feed

  • Pregunta

  • Deseo rellenar una cadena siempre con el formato: "DD:HH:MM:SS"

    Por ejemplo, si proporciono: "12", que devuelva: "00:00:00:12"

    Si proporciono: "5:20", que devuelva: "00:00:05:20"

    Y así sucesivamente, o sea que se complete con ceros.

    miércoles, 24 de marzo de 2021 3:48

Respuestas

  • tengo el dato como cadena, pero en todo caso ¿no se podría convertir esa cadena a DateTime para luego aplicarle el formato?

    Sí, pero habría que saber exactamente cuáles son exactamente las posibilidades que te pueden llegar en la cadena. Por ejemplo, si se sabe que siempre llega como minutos:segundos, por ejemplo, 5:12, se puede usar DateTime.TryParseExact pasándole "m:ss" en el formato, o se puede trocear la cadena y hacer el cálculo a mano. En este último caso no sería necesario pasar por un DateTeim, ya que una vez que tengas las porciones de la cadena pueden simplemente formatearse para producir el resultado deseado:

    Dim entrada = "5:12" 'Ejemplo
    Dim partes as String() = entrada.Split(":")
    Dim minutos as Integer = Integer.Parse(partes(0))
    Dim segundos as Integer = Integer.Parse(partes(1))
    Dim resultado as String = String.Format("00:00:{0:00}:{0:00}", minutos, segundos)

    Este ejemplo presume que siempre hay dos partes separadas por dos puntos en la cadena de entrada. Desde luego, este código se irá complicando según quieras añadirle más combinaciones de datos de entrada.


    miércoles, 24 de marzo de 2021 14:29
  • Deleted
    • Marcado como respuesta James2016-2 miércoles, 24 de marzo de 2021 18:19
    miércoles, 24 de marzo de 2021 14:40

Todas las respuestas

  • ¿Necesariamente te llega la información en forma de string? ¿No la tienes previamente en forma de DateTime? Porque si la tienes como DateTime, entonces es muy sencillo darle ese formato, basta con usar la instrucción Format:

    Dim tiempo as DateTime = ....

    Dim resultado as String = tiempo.Format("dd:HH:mm:ss")

    miércoles, 24 de marzo de 2021 6:55
  • ¿Necesariamente te llega la información en forma de string? ¿No la tienes previamente en forma de DateTime? Porque si la tienes como DateTime, entonces es muy sencillo darle ese formato, basta con usar la instrucción Format:

    Dim tiempo as DateTime = ....

    Dim resultado as String = tiempo.Format("dd:HH:mm:ss")

    No, tengo el dato como cadena, pero en todo caso ¿no se podría convertir esa cadena a DateTime para luego aplicarle el formato?
    miércoles, 24 de marzo de 2021 7:44
  • Hola James,

    Gracias por levantar tu consulta en los foros de MSDN.

    Eric Ruiz

    ____________________________

    Por favor recuerde "Marcar como respuesta" las respuestas que hayan resuelto su problema, es una forma común de reconocer a aquellos que han ayudado, y hace que sea más fácil para los otros visitantes encontrar la solución más tarde.

    Si tiene algún cumplido o reclamo sobre el soporte de MSDN siéntase en la libertad de contactar MSDNFSF@microsoft.com.

    miércoles, 24 de marzo de 2021 13:56
    Moderador
  • tengo el dato como cadena, pero en todo caso ¿no se podría convertir esa cadena a DateTime para luego aplicarle el formato?

    Sí, pero habría que saber exactamente cuáles son exactamente las posibilidades que te pueden llegar en la cadena. Por ejemplo, si se sabe que siempre llega como minutos:segundos, por ejemplo, 5:12, se puede usar DateTime.TryParseExact pasándole "m:ss" en el formato, o se puede trocear la cadena y hacer el cálculo a mano. En este último caso no sería necesario pasar por un DateTeim, ya que una vez que tengas las porciones de la cadena pueden simplemente formatearse para producir el resultado deseado:

    Dim entrada = "5:12" 'Ejemplo
    Dim partes as String() = entrada.Split(":")
    Dim minutos as Integer = Integer.Parse(partes(0))
    Dim segundos as Integer = Integer.Parse(partes(1))
    Dim resultado as String = String.Format("00:00:{0:00}:{0:00}", minutos, segundos)

    Este ejemplo presume que siempre hay dos partes separadas por dos puntos en la cadena de entrada. Desde luego, este código se irá complicando según quieras añadirle más combinaciones de datos de entrada.


    miércoles, 24 de marzo de 2021 14:29
  • Deleted
    • Marcado como respuesta James2016-2 miércoles, 24 de marzo de 2021 18:19
    miércoles, 24 de marzo de 2021 14:40
  • Eso funcionará... a no ser que se reciba un tiempo tal como "125:20" (125 minutos y 20 segundos) y se desee obtener "00:02:05:20" (dos horas, cinco minutos y veinte segundos).

    Por eso decía yo que es un requisito importante conocer previamente el rango y tipo de cadenas de entrada que se espera recibir.

    miércoles, 24 de marzo de 2021 15:16
  • Eso funcionará... a no ser que se reciba un tiempo tal como "125:20" (125 minutos y 20 segundos) y se desee obtener "00:02:05:20" (dos horas, cinco minutos y veinte segundos).

    Por eso decía yo que es un requisito importante conocer previamente el rango y tipo de cadenas de entrada que se espera recibir.

    Son cadenas pero tengo la certeza que son tiempos con el formato correcto, es decir nunca se da el caso de que supere los 59 minutos en ese caso aparecen en las cadenas las horas, por tanto sí sirve el código proporcionado. Gracias por todo.
    miércoles, 24 de marzo de 2021 18:18
  • Dim pad = "00:00:00:00"
    Dim tiempo = "5:20"
    
    tiempo = pad.Substring(0, pad.Length - tiempo.Length) & tiempo

    Esa es otra muy buena alternativa. Gracias.
    miércoles, 24 de marzo de 2021 18:19