es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Crear método para el formato de tiempo de 24 horas

Estoy intentando crear un método en C# con dos argumentos de tipo int.

public void Time(int hours, int minutes)

que cumpla con todos los siguientes casos de prueba:

Time(11, 7), devuelve: "11:07"
Time(24, 0), devuelve: "00:00"
Time(26, 0), devuelve: "02:00"
Time(0, 160), devuelve: "02:40" (ya que 160 minutos equivalen a 2 horas y 40 minutos)
Time(-1, 0), devuelve: "23:00"  (número negativo - en sentido contrario a las agujas del reloj)
Time(1, -40), devuelve: "00:20"
Time(-25, -160), devuelve: "20:20" 

Mi intento inadecuado fue el siguiente:

if (hours > 23)
{
    hours %= 24; 
}

if (minutes > 59)
{
    minutes %= 60;
}

Pero esto solo satisface las primeras tres condiciones.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para crear un método en C# que cumpla con todos los casos de prueba dados para convertir horas y minutos a un formato de tiempo de cadena, podemos utilizar el siguiente algoritmo:

    1. Verificar si los valores de horas y minutos son positivos o negativos:
    • Si el valor de horas es negativo, agregar 24 hasta que sea positivo.
    • Si el valor de minutos es negativo, establecerlo como 60 menos el resto del valor absoluto dividido por 60, luego restar 1 a las horas si el valor original era 0, ya que hemos tomado prestada una hora completa.
    1. Agregar el valor de horas y minutos formateado a una cadena con un separador de dos puntos y devolverla.

    Aquí está la implementación del código de este método:

    “`c#
    public string Time(int hours, int minutes)
    {
    // Manejo de valores negativos
    if (hours < 0) hours = 24 + (hours % 24);
    if (minutes < 0)
    {
    minutes = 60 – (Math.Abs(minutes) % 60);
    if (minutes == 60)
    {
    minutes = 0;
    hours–;
    }
    }

    // Formateo de tiempo
    string h = hours.ToString().PadLeft(2, '0');
    string m = minutes.ToString().PadLeft(2, '0');
    return h + ":" + m;
    

    }
    “`

    Este método maneja todos los casos de prueba dados correctamente y es más robusto que el intento inicial.

Comments are closed.