Código java para dia da semana

Boa noite. Estou com dificuldade para mostrar no form o dia da semana. Poderiam me ajudar?

private void formWindowActivated(java.awt.event.WindowEvent evt) {                                     
        Date data = new Date();
        lblData.setText(data.toString());
        DateFormat formatador = DateFormat.getDateInstance(DateFormat.SHORT);
        lblData.setText(formatador.format(data));
public static int getDiaSemana(LocalDate date) {
    DayOfWeek day = date.getDayOfWeek();
    return day.getValue();
}

public static void main(String[] args) {
        LocalDate hoje = LocalDate.now();
        int diaSemana = getDiaSemana(hoje);

        switch (diaSemana) {
            case 1:
                System.out.println("Segunda-Feira");
                break;
            case 2:
                System.out.println("Terça-Feira");
                break;
            case 3:
                System.out.println("Quarta-Feira");
                break;
            case 4:
                System.out.println("Quinta-Feira");
                break;
            case 5:
                System.out.println("Sexta-Feira");
                break;
            case 6:
                System.out.println("Sábado");
                break;
            case 7:
                System.out.println("Domingo");
                break;
            default:
                break;
        }

    }

OUTPUT:


Caminho mais fácil:

  public static String getDiaSemana(LocalDate date) {
        DayOfWeek day = date.getDayOfWeek();
        return day.getDisplayName(TextStyle.FULL, new Locale("pt"));
    }

    public static void main(String[] args) {
        LocalDate hoje = LocalDate.now();
        System.out.println(getDiaSemana(hoje));
    }

image


Tem o java.time tbm

https://www.w3schools.com/java/java_date.asp

Exemplo:

image

1 curtida

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()));
2 curtidas