Existe um formato de data para exibir o dia da semana em java?

127

Conheço formatos de data como
"yyyy-mm-dd"-que exibe data em formato 2011-02-26
"yyyy-MMM-dd"-que exibe data em formato2011-FEB-26

para ser usado, por exemplo:

SimpleDateFormat formatter = new SimpleDateFormat(
                "yyyy/MMM/dd ");

Quero um formato que me ajude a exibir o dia da semana como 2011-02-MONalgo assim. Eu só quero que o dia da semana seja exibido em caracteres com o mês e o ano. Você pode me falar de um formato como este?

Rogerstone
fonte
1
Que tal usar apenas ddcomo formato?
Johan Sjöberg
3
Tenho certeza de que os documentos da API ( download.oracle.com/javase/1.4.2/docs/api/java/text/… ) ficarão felizes em fornecer uma resposta.
M. Jessup
1
o que você quer dizer com "dia" - dia da semana, dia do mês. No seu exemplo, a data inteira é exibida. Por favor, mostre a entrada e a saída exatas que você deseja.
Bozho
2
Em geral, use melhor a -notação com datas no formato ISO (ou seja, ano-mês-dia). A colisão foi eleito há uma vez que não foi usado para quaisquer outros formatos de data, no momento, a confusão evitar, e agora todo mundo está usando sua ordenação personalizada com o traço ...
Paulo Ebermann

Respostas:

322

Isso deve exibir 'ter':

new SimpleDateFormat("EEE").format(new Date());

Isso deve exibir 'Terça-feira':

new SimpleDateFormat("EEEE").format(new Date());

Isso deve exibir 'T':

new SimpleDateFormat("EEEEE").format(new Date());

Portanto, seu exemplo específico seria:

new SimpleDateFormat("yyyy-MM-EEE").format(new Date());
Nathan Feger
fonte
5
Bela solução! O que eu estava procurando era: segunda-feira, 04/04/2016. Então, no meu caso, new SimpleDateFormat("EEEE, dd/MM/yyyy");se isso ajudar alguém no futuro.
AuroMetal
1
OK, funciona. EEEEExibe os nomes inteiros de dia da semana - ou seja, 'Monday', 'terça-feira' etc.
kosiara - Bartosz Kosarzycki
Eu realmente não tinha considerado que este site estaria por perto, muito menos java finalmente chegaria ao baile no Date. Tecnicamente, responde à pergunta dos OPs. No entanto, eu provavelmente pode adicionar uma nova seção sobre como as novas obras stuff java.time
Nathan Feger
18

Sim - 'E' faz o truque

http://download.oracle.com/javase/6/docs/api/java/text/SimpleDateFormat.html

Date date = new Date();
DateFormat df = new SimpleDateFormat("yyyy-MM-E");
System.out.println(df.format(date));
kit de ferramentas
fonte
5
ver oráculo na url dos javadocs ainda parece estranho.
Nathan Feger
Também usamos: DateFormat df = new SimpleDateFormat("yyyy-MM-EEEEEEE");para exibir o DayOfWeek longo.
você precisa
4
SimpleDateFormat sdf=new SimpleDateFormat("EEE");

EEE significa dia da semana, por exemplo, quinta-feira é exibido como qui.

user2824143
fonte
3

tl; dr

LocalDate.of( 2018 , Month.JANUARY , 23 )
         .format( DateTimeFormatter.ofPattern( uuuu-MM-EEE , Locale.US )  )

java.time

A abordagem moderna usa as classes java.time.

LocalDate ld = LocalDate.of( 2018 , Month.JANUARY , 23 ) ;

Observe como especificamos um Localetal como Locale.CANADA_FRENCHpara determinar a linguagem humana usada para traduzir o nome do dia.

DateTimeFormatter f = DateTimeFormatter.ofPattern( uuuu-MM-EEE , Locale.US ) ;
String output = ld.format( f ) ;

ISO 8601

By the way, você pode estar interessado no padrão semana ISO 8601 esquema de numeração: yyyy-Www-d.

2018-W01-2

A semana 1 tem a primeira quinta-feira do ano civil. A semana começa na segunda-feira. Um ano tem 52 ou 53 semanas. Os últimos / primeiros dias de um ano civil podem chegar ao ano seguinte / anterior, com base na semana.

O dígito único no final é dia da semana, 1 a 7 para segunda-feira a domingo.

Adicione a classe da biblioteca ThreeTen-Extra ao seu projeto para a YearWeekclasse.


Sobre java.time

A estrutura java.time é integrada ao Java 8 e posterior. Essas classes suplantar os velhos problemáticos legados aulas de data e hora, como java.util.Date, Calendar, e SimpleDateFormat.

O projeto Joda-Time , agora em modo de manutenção , aconselha a migração para as classes java.time .

Para saber mais, consulte o Tutorial do Oracle . E procure Stack Overflow para muitos exemplos e explicações. A especificação é JSR 310 .

Onde obter as classes java.time?

  • Java SE 8 , Java SE 9 e posterior
    • Construídas em.
    • Parte da API Java padrão com uma implementação em pacote configurável.
    • O Java 9 adiciona alguns recursos e correções menores.
  • Java SE 6 e Java SE 7
    • Grande parte da funcionalidade java.time é portada para Java 6 e 7 no ThreeTen-Backport .
  • Android
    • Versões posteriores das implementações do pacote Android das classes java.time.
    • Para anteriormente Android, o ThreeTenABP projeto adapta ThreeTen-Backport (mencionados acima). Consulte Como usar o ThreeTenABP… .

O projeto ThreeTen-Extra estende java.time com classes adicionais. Este projeto é um campo de prova para possíveis adições futuras ao java.time. Você pode encontrar algumas classes úteis aqui, como Interval, YearWeek, YearQuarter, e mais .

Basil Bourque
fonte
2

Eu sei que a pergunta é sobre obter o dia da semana como sequência (por exemplo, o nome abreviado), mas para quem procura o dia numérico da semana (como eu era), você pode usar a nova sequência de formato "u", suportada desde o Java 7. Por exemplo:

new SimpleDateFormat("u").format(new Date());

retorna o índice do dia da semana de hoje, a saber: 1 = segunda-feira, 2 = terça-feira, ..., 7 = domingo.

Sal Borrelli
fonte