Como Calcular Tempo Relativo
em C#
Ao trabalhar com datas e horas em C#, você pode sentir a necessidade de expressar quanto tempo passou desde um determinado evento. Isso pode melhorar a experiência do usuário ao exibir o tempo em um formato facilmente digerível, como “há 2 horas” ou “há um mês”. Neste post, vamos explorar como implementar essa funcionalidade usando as classes DateTime
e TimeSpan
em C#.
O Conceito de Tempo Relativo
Tempo relativo refere-se a expressar o tempo decorrido desde um certo evento em termos de uma linguagem facilmente compreensível. Em vez de mostrar carimbos de data/hora exatos, exibir o tempo como “há 3 dias” ou “ontem” facilita para os usuários compreenderem o tempo decorrido sem exigir que realizem cálculos mentais.
Implementando Tempo Relativo em C#
Aqui está como calcular o tempo relativo usando um valor DateTime
em C#:
Passo 1: Defina Constantes para Intervalos de Tempo
Primeiro, você precisará estabelecer constantes que representem vários intervalos de tempo. Isso torna seu código mais limpo e compreensível.
const int SEGUNDO = 1;
const int MINUTO = 60 * SEGUNDO;
const int HORA = 60 * MINUTO;
const int DIA = 24 * HORA;
const int MÊS = 30 * DIA;
Passo 2: Calcule o TimeSpan
Para determinar quanto tempo passou, calcule o TimeSpan
entre o tempo atual e o DateTime
fornecido.
var ts = new TimeSpan(DateTime.UtcNow.Ticks - yourDate.Ticks);
double delta = Math.Abs(ts.TotalSeconds);
Passo 3: Determine o Formato de Tempo Apropriado
Com o TimeSpan
calculado, você pode agora determinar como formatar o tempo relativo usando estruturas condicionais.
Aqui está como você pode retornar a string apropriada com base em diferentes intervalos:
if (delta < 1 * MINUTO)
return ts.Seconds == 1 ? "um segundo atrás" : ts.Seconds + " segundos atrás";
if (delta < 2 * MINUTO)
return "há um minuto";
if (delta < 45 * MINUTO)
return ts.Minutes + " minutos atrás";
if (delta < 90 * MINUTO)
return "há uma hora";
if (delta < 24 * HORA)
return ts.Hours + " horas atrás";
if (delta < 48 * HORA)
return "ontem";
if (delta < 30 * DIA)
return ts.Days + " dias atrás";
if (delta < 12 * MÊS)
{
int meses = Convert.ToInt32(Math.Floor((double)ts.Days / 30));
return meses <= 1 ? "um mês atrás" : meses + " meses atrás";
}
else
{
int anos = Convert.ToInt32(Math.Floor((double)ts.Days / 365));
return anos <= 1 ? "um ano atrás" : anos + " anos atrás";
}
Considerações Finais
O snippet de código acima permite que você calcule e exiba efetivamente o tempo relativo de uma maneira direta. Ao implementar isso em sua aplicação C#, você pode melhorar sua usabilidade tornando as referências de data mais relacionáveis para os usuários.
Agora você está equipado com uma maneira prática de aprimorar sua aplicação com exibições de tempo relativo. Boa codificação!