Como humanizar o formato dos DateTime em C#
Datas humanizadas são mais fáceis de ler. Eles estão bem formatados. Podemos mostrar "1 hora atrás" ou "1 minuto atrás", em vez do formato padrão, confuso. Hoje quero apresentar apenas um algoritmos que nos ajudarás a obter esse resultado em c#.
O Algoritmo
public static string GetDataHumanizada(DateTime d)
{
// Obtém o intervalo de tempo decorrido até a data actual.
TimeSpan s = DateTime.Now.Subtract(d);
int diasTotal = (int)s.TotalDays;
int segundosTotal = (int)s.TotalSeconds;
// Se o total de dias for superior à 31 dias ou inferior a zero
// retornamos a data inserida no argumento.
if (diasTotal < 0 || diasTotal >= 31)
{
return d.ToShortDateString();
}
if (diasTotal == 0)
{
// Menor que 1 minuto
if (segundosTotal < 60)
{
return "Agora mesmo";
}
// Menor que 2 minutos
if (segundosTotal < 120)
{
return "1 minuto atrás";
}
// Menor que 1 hora
if (segundosTotal < 3600)
{
return string.Format("{0} minutos atrás",
Math.Floor((double)segundosTotal / 60));
}
// Menor que 2 horas
if (segundosTotal < 7200)
{
return "1 hora atrás";
}
// Menor que 1 dia
if (segundosTotal < 86400)
{
return string.Format("{0} horas atrás",
Math.Floor((double )segundosTotal / 3600));
}
}
// Completou um dia
if (diasTotal == 1)
{
return "Ontem";
}
// Menor que 1 semana
if (diasTotal < 7)
{
return string.Format("{0} dias atrás",
diasTotal);
}
// Menos que 1 mês
if (diasTotal < 31)
{
return string.Format("{0} semanas atrás",
Math.Ceiling((double)diasTotal / 7));
}
return null;
}
Como usar?
Deixa-me dar um exemplo rápido de como usar:
static void Main()
{
DateTime dataPublicacao = new DateTime(2019, 5, 30,21,15,36);
//Data de Publicacao é: 30/05/2019 21:15:36
Console.WriteLine(GetDataHumanizada(dataPublicacao));
Console.ReadKey();
// Resultado: 4 minutos atrás
// Onde dada do sistema é: 30/05/2019 21:15:32
}
Conforme o nosso algoritmo está podemos humanizar a data apenas até semanas. Se queres um desafio, altere-o até meses ou mesmo até anos. Espero ter ajudado.
Um forte abraço.
Este comentário foi removido por um gestor do blogue.
ResponderEliminar