Para formatar um java.util.Date
, basta usar um SimpleDateFormat
:
Date data = new Date();
SimpleDateFormat formatador = new SimpleDateFormat("EEEE", new Locale("pt", "BR"));
lblData.setText(formatador.format(data));
Veja na documentação que E
corresponde ao nome do dia da semana, e usando EEEE
, é usado o “nome completo” (conforme descrito aqui: “se 4 ou mais letras são usadas, é usada a forma ‘cheia’”).
É importante também informar o java.util.Locale
(no caso, usei “pt-BR”, que corresponde ao português do Brasil), para que seja usado o idioma correto. Se você não informa o Locale
, será usado o default que estiver configurado na JVM, e pode não ser o que você precisa (mesmo que seja, qualquer aplicação rodando na mesma JVM pode alterar isso com Locale.setDefault
, então se você quer os nomes em um idioma específico, coloque-o).
Um detalhe é que assim serão usados os nomes que estão built-in na JVM (ex: “Sexta-feira”, “Sábado”, etc). Se quiser strings diferentes, o único jeito é defini-las separadamente:
String[] diasDaSemana = { "", "Domingão", "Segundona brava", "Terça", "Quarta", "Quinta", "sextou!", "sabadão" };
Calendar cal = Calendar.getInstance();
lblData.setText(diasDaSemana[cal.get(Calendar.DAY_OF_WEEK)]);
Agora usei Calendar
, que retorna o dia da semana usando valores de 1 (domingo) a 7 (sábado).
E também tem o jeito desnecessariamente mais complicado, que é mudar os valores do SimpleDateFormat
:
Date data = new Date(System.currentTimeMillis() + (1000 * 3600 * 24));
SimpleDateFormat formatador = new SimpleDateFormat("EEEE", new Locale("pt", "BR"));
DateFormatSymbols symbols = formatador.getDateFormatSymbols();
symbols.setWeekdays(new String[] { "", "Domingão", "Segundona brava", "Terça", "Quarta", "Quinta", "sextou!", "sabadão" });
formatador.setDateFormatSymbols(symbols);
lblData.setText(formatador.format(data));
Mas se estiver usando Java >= 8, é melhor usar a API java.time
:
LocalDate data = LocalDate.now();
lblData.setText(data.getDayOfWeek().getDisplayName(TextStyle.FULL, new Locale("pt", "BR")));
A desvantagem de usar getDisplayName
é que internamente ele sempre cria um novo DateTimeFormatter
. Mas se quiser, pode criar um separadamente e reaproveitá-lo:
// na sua classe, crie um campo static
private static final DateTimeFormatter FORMATADOR = DateTimeFormatter.ofPattern("EEEE", new Locale("pt", "BR"));
private void formWindowActivated(java.awt.event.WindowEvent evt) {
lblData.setText(FORMATADOR.format(LocalDate.now()));
}
Já para customizar os textos, é um pouco diferente: você precisa criar um Map
que mapeia os valores do dia da semana aos seus textos. A diferença é que nesta API a segunda tem o valor 1, terça é 2, etc… até domingo (7):
Map<Long, String> diasDaSemana = new HashMap<Long, String>();
diasDaSemana.put(1L, "Segundona");
diasDaSemana.put(2L, "Terça");
// ... colocar todos os valores, até 7 para domingo
DateTimeFormatter formatador = new DateTimeFormatterBuilder()
.appendText(ChronoField.DAY_OF_WEEK, diasDaSemana)
.toFormatter(new Locale("pt", "BR"));
lblData.setText(formatador.format(LocalDate.now()));