Cómo Calcular Tiempo Relativo en C#

Al trabajar con fechas y horas en C#, puede que encuentres la necesidad de expresar cuánto tiempo ha pasado desde cierto evento. Esto puede mejorar la experiencia del usuario al mostrar el tiempo en un formato fácilmente comprensible, como “hace 2 horas” o “hace un mes”. En esta publicación, exploraremos cómo implementar esta funcionalidad utilizando las clases DateTime y TimeSpan en C#.

El Concepto de Tiempo Relativo

El tiempo relativo se refiere a expresar el tiempo transcurrido desde cierto evento en términos de un lenguaje fácilmente comprensible. En lugar de mostrar marcas de tiempo exactas, mostrar el tiempo como “hace 3 días” o “ayer” facilita a los usuarios la comprensión del tiempo transcurrido sin que tengan que realizar cálculos mentales.

Implementando Tiempo Relativo en C#

Aquí te mostramos cómo calcular el tiempo relativo utilizando un valor DateTime en C#:

Paso 1: Definir Constantes para Intervalos de Tiempo

Primero, necesitarás establecer constantes que representen varios intervalos de tiempo. Esto hace que tu código sea más limpio y comprensible.

const int SEGUNDO = 1;
const int MINUTO = 60 * SEGUNDO;
const int HORA = 60 * MINUTO;
const int DÍA = 24 * HORA;
const int MES = 30 * DÍA;

Paso 2: Calcular el TimeSpan

Para determinar cuánto tiempo ha pasado, calcula el TimeSpan entre el tiempo actual y el DateTime dado.

var ts = new TimeSpan(DateTime.UtcNow.Ticks - yourDate.Ticks);
double delta = Math.Abs(ts.TotalSeconds);

Paso 3: Determinar el Formato de Tiempo Apropiado

Con el TimeSpan calculado, ahora puedes determinar cómo formatear el tiempo relativo usando declaraciones condicionales.

Aquí te mostramos cómo puedes devolver la cadena apropiada en función de diferentes intervalos:

if (delta < 1 * MINUTO)
    return ts.Seconds == 1 ? "hace un segundo" : "hace " + ts.Seconds + " segundos";

if (delta < 2 * MINUTO)
    return "hace un minuto";

if (delta < 45 * MINUTO)
    return "hace " + ts.Minutes + " minutos";

if (delta < 90 * MINUTO)
    return "hace una hora";

if (delta < 24 * HORA)
    return "hace " + ts.Hours + " horas";

if (delta < 48 * HORA)
    return "ayer";

if (delta < 30 * DÍA)
    return "hace " + ts.Days + " días";

if (delta < 12 * MES)
{
    int meses = Convert.ToInt32(Math.Floor((double)ts.Days / 30));
    return meses <= 1 ? "hace un mes" : "hace " + meses + " meses";
}
else
{
    int años = Convert.ToInt32(Math.Floor((double)ts.Days / 365));
    return años <= 1 ? "hace un año" : "hace " + años + " años";
}

Reflexiones Finales

El fragmento de código anterior te permite calcular y mostrar eficazmente el tiempo relativo de una manera sencilla. Al implementar esto en tu aplicación C#, puedes mejorar su usabilidad al hacer que las referencias de fechas sean más comprensibles para los usuarios.

Ahora estás equipado con una forma práctica de mejorar tu aplicación con displays de tiempo relativo. ¡Feliz codificación!