Nesta postagem vamos analisar como formatar datas para exibicao ao usuario. Passando do simples e direto metodo java.util.Date.toString() e indo a exemplos prontos da completa e personalizavel classe java.text.SimpleDateFormat.Esta postagem serve como um complemento a nossa postagem anterior Formatando Mensagens em Java, onde, apesar de apresentar alguns exemplos de formatacao de datas, o foco era a formatacao de mensagens textuais completas, independente do tipo de dado.Metodo toString() da classe java.util.Date()Esta e uma das formas mais simples e diretas de transformar uma data em um texto, infelizmente, este recurso nao possui localizacao e a exibicao sempre e feita em um padrao em ingles como no seguinte exemplo: Mon Sep 29 20:12:31 BRT 2014. Como solucao rapida, nos teriamos como alternativa o metodo new java.util.Date().toLocaleString() que nos devolveria algo como: 29/09/2014 20:12:31, algo ja dentro do padrao brasileiro mas com um aviso de uso de metodo obsoleto (deprecated) no seu codigo.A classe java.text.DateFormatA classe DateFormat possui metodos para recuperacao de instancias de formatadores de data e hora. Ela pode ser considerada a classe mais recomendavel para formatacao de datas, pois ela e baseada em alguns padroes que tem como objetivo garantir a localizacao do seu aplicativo, ou seja, voce nao precisa verificar como um data e representada em japones, utilizando esta classe voce garante a correta representacao.Estes padroes sao limitados peles seguintes estilos:DateFormat.SHORT - 29/09/14 para data e 20:12 para hora;DateFormat.MEDIUM - 29/09/2014 para data e 20:12:31 para hora;DateFormat.LONG - 29 de Setembro de 2014 para data e 20h12min31s BRT para hora;DateFormat.FULL - Segunda-feira, 29 de Setembro de 2014 para data e 20h12min31s BRT para hora.Os exemplos acima estao sendo exibidos conforme a localizacao definida para o padrao brasileiro de datas e horas, mas lembrando, que se este codigo for executado em um ambiente com localizacao diferente (ingles por exemplo) os formatos irao respeitar os padroes daquela localizacao sem que voce precise realizar configuracoes adicionais.DateFormat.getInstance().format(Date date)Este metodo retorna uma instancia de formatador para data e hora de acordo com o estilo SHORT.Por exemplo: 29/09/14 20:12DateFormat.getDateInstance().format(Date date)Este metodo retorna uma instancia de formatador para data de acordo com o estilo de data padrao.Por exemplo: 29/09/2014DateFormat.getTimeInstance().format(Date date)Este metodo retorna uma instancia de formatador para hora de acordo com o estilo de hora padrao.Por exemplo: 20:12:31DateFormat.getDateTimeInstance().format(Date date)Este metodo retorna uma instancia de formatador para data e hora de acordo com os estilos de data e hora padroes.Por exemplo: 29/09/2014 20:12:31DateFormat.getDateInstance(int style).format(Date date)Este metodo retorna uma instancia de formatador para data de acordo com o estilo passado como parametro.DateFormat.getTimeInstance(int style).format(Date date)Este metodo retorna uma instancia de formatador para hora de acordo com o estilo passado como parametro.DateFormat.getDateTimeInstance(int dateStyle, int timeStyle).format(Date date)Este metodo retorna uma instancia de formatador para data e hora de acordo com os estilos passados como parametros.A classe java.text.SimpleDateFormatComo acabamos de ver, a classe DateFormat e capaz de fornecer formatadores de data e hora com algum nivel de opcoes para o uso em construcoes de mensagens a serem exibidas aos usuarios. Vimos tambem que esta classe ja e localizada e remove esta preocupacao do desenvolvedor, mas esta caracteristica tambem impede um nivel de personalizacao mais detalhado