Depende de como você recebe a data. Serão 3 números separados? Será uma string no formato “dia/mês/ano”?
No primeiro caso, se estiver usando Java >= 8, basta usar java.time.format.DateTimeFormatter
juntamente com java.time.LocalDate
:
int dia = 1, mes = 1, ano = 2000;
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("d 'de' MMMM 'de' uuuu", new Locale("pt", "BR"));
System.out.println(formatter.format(LocalDate.of(ano, mes, dia))); // 1 de Janeiro de 2000
Só que “Janeiro” ficou com “J” maiúsculo, já que os nomes dos meses estão built-in na JVM (embora possa variar de acordo com a versão, pois essas informações podem ser atualizadas conforme a versão do JDK). Também usei o java.util.Locale
com o valor “pt-BR” que corresponde ao português do Brasil, assim o nome do mês fica no idioma correto (sem especificar o locale, ele usará o default que está configurado na JVM, e não é garantido que seja português - pode até ser, mas é melhor especificar um se você quer sempre naquele idioma).
Se quiser que sempre seja com letra minúscula, é possível sobrescrever os valores built-in, usando um Map
com valores específicos:
int dia = 1, mes = 1, ano = 2000;
Map<Long, String> meses = new HashMap<Long, String>();
meses.put(1L, "janeiro");
meses.put(2L, "fevereiro");
// ... colocar todos os valores, até dezembro
DateTimeFormatter formatter = new DateTimeFormatterBuilder()
.appendPattern("d 'de' ")
.appendText(ChronoField.MONTH_OF_YEAR, meses) // usa os valores do Map para o mês
.appendPattern(" 'de' uuuu")
.toFormatter(new Locale("pt", "BR"));
System.out.println(formatter.format(LocalDate.of(ano, mes, dia))); // 1 de janeiro de 2000
Por fim, se você recebe a data como uma String
no formato “dia/mês/ano”, aí você precisa de outro DateTimeFormatter
para criar a data (e depois você usa um dos métodos acima para formatá-la):
DateTimeFormatter parser = DateTimeFormatter.ofPattern("dd/MM/uuuu");
LocalDate data = LocalDate.parse("01/01/2000", parser);
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("d 'de' MMMM 'de' uuuu", new Locale("pt", "BR"));
System.out.println(formatter.format(data)); // 1 de Janeiro de 2000