quinta-feira, 30 de maio de 2019

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.

Pesquisar neste blogue

Com tecnologia do Blogger.

Páginas