Hora por Extenso em uma Aplicação Java

Veja neste artigo uma aplicação Java para definir a hora por extenso. Obtendo para a hora 20:43:14, por exemplo, o seguinte resultado: vinte horas, quarenta e três minutos e quatorze segundos.

Caros Amigos,

Pretendo demonstrar neste artigo uma aplicação Java para definir a hora por extenso. Obtendo para a hora 20:43:14, por exemplo, o seguinte resultado: vinte horas, quarenta e três minutos e quatorze segundos.

No método main() da classe Exemplo, apresentada na Listagem 1, foi declarado o objeto agora a partir da classe Calendar (pacote java.util). A classe Calendar fornece um método de classe chamado getInstance() que retorna um objeto Calendar com os campos de calendário inicializados com a data e hora atual. As variáveis h (horas), m (minutos) e s (segundos) recebem em suas respectivas declarações os valores retornados pelas chamadas do método get() utilizando como argumentos os valores dos campos de calendário para: hora- Calenda.HOUR, minutos- Calendar.MINUTE e segundos- Calendar.SECOND. Se o valor das horas se encontra após ao meio dia (Calendar.PM==1) a este valor será somado 12 horas (trabalhando com o relógio no sistema de 24 horas). Por último, na variável result será concatenado o resultado da hora por extenso através das chamadas ao método tempoPorExtenso(). Obs. os tempos de minutos e segundos iguais a zero são ignorados no resultado.

O método tempoPorExtenso(), ainda na Listagem 1, foi implementado com dois parâmetros: n- valor do tempo (horas, minutos ou segundos); e, tipo- utilizado para indicar que o tempo recebido corresponde, 1- horas, 2- minutos e 3- segundos. No corpo do método foram declaradas três variáveis: parte- vetor de strings que indexa o extenso dos valores de 0 até 19; dezena- vetor de strings que indexa o extenso das dezenas 20, 30, 40 e 50; e, s- string que concatena o resultado do extenso do valor (valor de retorno). A lógica implementada para definir o valor: horas, minutos ou segundos por extenso, está baseada na verificação do valor do parâmetro n. Se o valor de n for menor que 19 o extenso será definido através da variável parte (parte[n]), caso contrário, o valor é definido pela combinação do extenso da dezena (dezena[dez]) com o extenso da unidade (parte[unid]), quando houver. É importante destacar que os valores: uma hora, duas horas, vinte e uma horas e vinte e duas horas, são tratados diferentemente no código do que, por exemplo: um minuto, dois minutos, vinte e um minutos e vinte e dois minutos. Finalizando o trecho de código do método será concatenado a variável s o tipo do valor tratado: 1- hora, 2- minuto e 3- segundo, verificando por último se o valor está no plural (n > 1), neste caso, será acrescentado o caractere 's' ao resultado final.

Listagem 1. Aplicação Java para definir a hora por extenso.

import java.util.Calendar; public class Exemplo { public static void main(String[] args) { Calendar agora = Calendar.getInstance(); // horas, minutos e segundos int h = agora.get(Calendar.HOUR) + ((Calendar.PM==1)?12:0); int m = agora.get(Calendar.MINUTE); int s = agora.get(Calendar.SECOND); String result = tempoPorExtenso(h, 1); if ((m != 0) && (s != 0)) // tem minutos e segundos result = result + ", " + tempoPorExtenso(m, 2) + " e " + tempoPorExtenso(s, 3); else if (m != 0) // so tem minutos (segundos = zero) result = result + " e " + tempoPorExtenso(m, 2); else if (s != 0) // so tem segundos (minutos = zero) result = result + " e " + tempoPorExtenso(s, 3); System.out.printf("Resultado:\n%s\n", result); } // o parâmetro "tipo" foi utilizado para indicar que o tempo recebido // (parâmetro "n") corresponde: 1- horas, 2- minutos e 3- segundos. public static String tempoPorExtenso(int n, int tipo) { String parte[] = {"zero", "um", "dois", "três", "quatro", "cinco", "seis", "sete", "oito", "nove", "dez", "onze", "doze", "treze", "quatorze", "quinze", "dezesseis", "dezessete", "dezoito", "dezenove"}; String dezena[] = {"", "", "vinte", "trinta", "quarenta", "cinquenta"}; String s; if (n <= 19) { if ((tipo == 1) && (n == 1)) // uma hora da madrugada s = "uma"; else if ((tipo == 1) && (n == 2)) // duas horas da madrugada s = "duas"; else s = parte[n]; } else { int dez = n / 10; int unid = n % 10; s = dezena[dez]; if (unid != 0) { if ((tipo == 1) && (unid == 1)) // vinte e uma horas s = s + " e uma"; else if ((tipo == 1) && (unid == 2)) // vinte e duas horas s = s + " e duas"; else s = s + " e " + parte[unid]; } } if (tipo == 1) s = s + " hora"; else if (tipo == 2) s = s + " minuto"; else s = s + " segundo"; if (n > 1) // plural s = s + "s"; return(s); // respondendo a chamada com o extenso do valor } }

Ao executar a aplicação o resultado apresentado na Figura 1 poderá ser exibido.

Figura 1. Executando a aplicação.

Veja também:

1) Data por Extenso em uma Aplicação Java

2) Valor por Extenso em uma Aplicação Java

3) Hora por Extenso em uma Aplicação Delphi

Obrigado e um abraço.

Prof. Omero Francisco Bertol (http://www.pb.utfpr.edu.br/omero/)

Aplicações Java (http://www.pb.utfpr.edu.br/omero/Java/Fontes.HTM)

Artigos relacionados