abril 23, 2014

Cálculo Simples de Data sem o uso de Date ou Calendar

Por Rogerio Coli

Uma das grandes dificuldades do Java é trabalhar com datas. Existem diversas APIs que resolvem esse problema de forma completa. No entanto através de um simples cálculo utilizando os operadores “/” (divisão) e “%” (resto), somos capazes de obter o resultado sem a utilização de nenhuma API específica. Obviamente trabalhando com String.

Saída:
Hoje é: dia 3, mês 4, ano 14.

Hoje é: dia 23, mês 4, ano 2014.

public class Main {

    public static void main(String[] args) {

        String hojeComAnoEmDoisDigitos = "030414";
        System.out.println(escreverDataPorExtensoComAnoEmDoisDigitos(hojeComAnoEmDoisDigitos));

        String hojeComAnoEmQuatroDigitos = "23042014";
        System.out.println(escreverDataPorExtensoComAnoEmQuatroDigitos(hojeComAnoEmQuatroDigitos));
    }

    public static String escreverDataPorExtensoComAnoEmDoisDigitos(String hojeComAnoEmDoisDigitos) {
        try {

            if(!isDataValida(hojeComAnoEmDoisDigitos, 6))
                return ("Data Inválida, Verifique se o dia, o mês e ano possuem 2 dígitos.");

            Integer divisorDiaDoisDigitos = 10_000;
            Integer divisorAnoDoisDigitos = 100;

            Integer hoje = Integer.parseInt(hojeComAnoEmDoisDigitos);

            Integer dia;
            Integer mes;
            Integer ano;

            dia = (hoje / divisorDiaDoisDigitos);
            mes = (hoje / divisorAnoDoisDigitos) % 100;
            ano = hoje % divisorAnoDoisDigitos;

            return String.format("Hoje é: dia %d, mês %d, ano %d. \n", dia, mes, ano);

        } catch (NumberFormatException e) {
            return "Erro ao formatar valor para número.";
        }
    }

    public static String escreverDataPorExtensoComAnoEmQuatroDigitos(String hojeComAnoEmQuatroDigitos) {
        try {

            if(!isDataValida(hojeComAnoEmQuatroDigitos, 8))
                return ("Data Inválida, Verifique se o dia, o mês possuem 2 dígitos e o ano quatro.");

            Integer hoje = Integer.parseInt(hojeComAnoEmQuatroDigitos);

            Integer divisorDiaQuatroDigitos = 1_000_000;
            Integer divisorAnoQuatroDigitos = 10_000;

            Integer dia;
            Integer mes;
            Integer ano;

            dia = (hoje / divisorDiaQuatroDigitos);
            mes = (hoje / divisorAnoQuatroDigitos) % 100;
            ano = hoje % divisorAnoQuatroDigitos;

            return String.format("Hoje é: dia %d, mês %d, ano %d. \n", dia, mes, ano);

        } catch (NumberFormatException e) {
            return "Erro ao formatar valor para número.";
        }
    }

    private static boolean isDataValida(String hoje, int i) {
        return hoje.length() == i;
    }

}