Esiste un formato di data per visualizzare il giorno della settimana in Java?


128

Conosco formati di data come
"yyyy-mm-dd"-che visualizza la data in formato2011-02-26
"yyyy-MMM-dd" -che mostra la data in formato2011-FEB-26

da utilizzare ad esempio:

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

Voglio un formato che mi aiuti a visualizzare il giorno della settimana come 2011-02-MONo altro. Voglio solo che il giorno della settimana venga visualizzato in caratteri con il mese e l'anno. Puoi parlarmi di un formato come questo?


1
Che ne dici di usare solo ddcome formato?
Johan Sjöberg

3
Sono sicuro che i documenti dell'API ( download.oracle.com/javase/1.4.2/docs/api/java/text/… ), sarebbero lieti di fornirti una risposta.
M. Jessup,

1
cosa intendi per "giorno" - giorno della settimana, giorno del mese. Nel tuo esempio viene visualizzata l'intera data. Mostra l'input e l'output esatti desiderati.
Bozho

2
In generale, è meglio usare la -notazione solo con le date in formato ISO (cioè anno-mese-giorno). Il trattino è stato scelto lì poiché all'epoca non era utilizzato per altri formati di data, per evitare confusione, e ora tutti usano il suo ordinamento personalizzato con il trattino ...
Paŭlo Ebermann

Risposte:


322

Dovrebbe essere visualizzato "Tue":

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

Dovrebbe essere visualizzato "Martedì":

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

Questo dovrebbe visualizzare "T":

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

Quindi il tuo esempio specifico sarebbe:

new SimpleDateFormat("yyyy-MM-EEE").format(new Date());

5
Bella soluzione! Quello che stavo cercando era: lunedì, 04/04/2016. Quindi nel mio caso, new SimpleDateFormat("EEEE, dd/MM/yyyy");se aiuta qualcuno in futuro.
AuroMetal

1
OK, funziona. EEEEmostra i nomi interi del giorno della settimana, ad esempio "lunedì", "martedì", ecc.
kosiara - Bartosz Kosarzycki

Non avevo davvero considerato che questo sito sarebbe stato in giro, per non parlare di java che finalmente sarebbe riuscito a salvarsi su Date. Tecnicamente risponde alla domanda dei PO. Tuttavia, posso probabilmente aggiungere una nuova sezione su come funziona la nuova roba java.time
Nathan Feger,


4
SimpleDateFormat sdf=new SimpleDateFormat("EEE");

EEE sta per giorno della settimana, ad esempio il giovedì viene visualizzato come gio.



3

tl; dr

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

java.time

L'approccio moderno utilizza le classi java.time.

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

Nota come specifichiamo un Localetale da Locale.CANADA_FRENCHdeterminare la lingua umana usata per tradurre il nome del giorno.

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

ISO 8601

Tra l'altro, si può essere interessati dalla norma ISO 8601 settimana schema di numerazione: yyyy-Www-d.

2018-W01-2

La settimana # 1 ha il primo giovedì dell'anno solare. La settimana inizia di lunedì. Un anno ha 52 o 53 settimane. Gli ultimi / i primi giorni di un anno solare possono arrivare nell'anno basato sulla settimana successivo / precedente.

L'unica cifra alla fine è il giorno della settimana, 1-7 per lunedì-domenica.

Aggiungi la classe della libreria ThreeTen-Extra al tuo progetto per la YearWeekclasse.


Di java.time

Il framework java.time è integrato in Java 8 e versioni successive. Queste classi soppiantare la vecchia fastidiosi legacy classi data-time come java.util.Date, Calendar, eSimpleDateFormat .

Il progetto Joda-Time , ora in modalità di manutenzione , consiglia la migrazione alle classi java.time .

Per saperne di più, vedere il tutorial Oracle . E cerca Stack Overflow per molti esempi e spiegazioni. La specifica è JSR 310 .

Dove ottenere le classi java.time?

  • Java SE 8 , Java SE 9 e versioni successive
    • Built-in.
    • Parte dell'API Java standard con un'implementazione in bundle.
    • Java 9 aggiunge alcune funzionalità e correzioni minori.
  • Java SE 6 e Java SE 7
    • Gran parte delle funzionalità java.time sono portate indietro su Java 6 e 7 in ThreeTen-Backport .
  • androide
    • Versioni successive delle implementazioni di bundle Android delle classi java.time.
    • Per precedenza Android, il ThreeTenABP progetto si adatta ThreeTen-Backport (di cui sopra). Vedi Come usare ThreeTenABP… .

Il progetto ThreeTen-Extra estende java.time con classi aggiuntive. Questo progetto è un banco di prova per possibili future aggiunte a java.time. Si possono trovare alcune classi utili, come per esempio Interval, YearWeek, YearQuartere altro .


2

So che la domanda riguarda l'ottenere il giorno della settimana come stringa (ad esempio il nome breve), ma per chiunque cerchi il giorno numerico della settimana (come lo ero io), puoi usare la nuova stringa di formato "u", supportata da Java 7. Ad esempio:

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

restituisce l'indice del giorno della settimana di oggi, ovvero: 1 = lunedì, 2 = martedì, ..., 7 = domenica.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.