Existe-t-il un format de date pour afficher le jour de la semaine en java?

128

Je connais des formats de date tels que
"yyyy-mm-dd"-qui affiche la date au format 2011-02-26
"yyyy-MMM-dd"-qui affiche la date au format2011-FEB-26

à utiliser par exemple dans:

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

Je veux un format qui m'aiderait à afficher le jour de la semaine comme 2011-02-MONou quoi que ce soit. Je veux juste que le jour de la semaine soit affiché en caractères avec le mois et l'année. Pouvez-vous me parler d'un format comme celui-ci?

rogerstone
la source
1
Que diriez-vous d'utiliser simplement ddcomme format?
Johan Sjöberg le
3
Je suis sûr que la documentation de l'API ( download.oracle.com/javase/1.4.2/docs/api/java/text/… ), serait heureuse de vous fournir une réponse.
M. Jessup
1
que voulez-vous dire «jour» - jour de la semaine, jour du mois. Dans votre exemple, la date entière est affichée. Veuillez montrer l'entrée et la sortie exactes que vous souhaitez.
Bozho
2
À un avis général, il vaut mieux utiliser la -notation uniquement avec les dates au format ISO (c'est-à-dire année-mois-jour). Le tiret a été élu là-bas car il n'était utilisé pour aucun autre format de date à l'époque, pour éviter toute confusion, et maintenant tout le monde utilise sa commande personnalisée avec le tiret ...
Paŭlo Ebermann

Réponses:

322

Cela devrait afficher 'Tue':

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

Cela devrait afficher «mardi»:

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

Cela devrait afficher 'T':

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

Ainsi, votre exemple spécifique serait:

new SimpleDateFormat("yyyy-MM-EEE").format(new Date());
Nathan Feger
la source
5
Belle solution! Ce que je cherchais était: Lundi 04/04/2016. Donc dans mon cas, new SimpleDateFormat("EEEE, dd/MM/yyyy");si cela aide quelqu'un à l'avenir.
AuroMetal
1
OK, ça marche. EEEEaffiche les noms entiers du jour de la semaine - c'est-à-dire «lundi», «mardi», etc.
kosiara - Bartosz Kosarzycki
Je n'avais pas vraiment pensé que ce site serait même là, et encore moins que java finirait par se débarrasser de Date. Cela répond techniquement à la question des PO. Cependant, je peux probablement ajouter une nouvelle section sur le fonctionnement du nouveau truc java.time
Nathan Feger
18

Ouais - 'E' fait l'affaire

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));
boîte à outils
la source
5
voir oracle dans l'url des javadocs est toujours étrange.
Nathan Feger
Nous utilisons également: DateFormat df = new SimpleDateFormat("yyyy-MM-EEEEEEE");pour un affichage long DayOfWeek.
Do Nhu Vy
4
SimpleDateFormat sdf=new SimpleDateFormat("EEE");

EEE signifie jour de la semaine, par exemple jeudi est affiché sous la forme Thu.

user2824143
la source
3

tl; dr

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

java.time

L'approche moderne utilise les classes java.time.

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

Notez comment nous spécifions un Localetel Locale.CANADA_FRENCHpour déterminer la langue humaine utilisée pour traduire le nom du jour.

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

ISO 8601

Soit dit en passant, vous pouvez être intéressé par la norme semaine ISO 8601 système de numérotation: yyyy-Www-d.

2018-W01-2

La semaine n ° 1 a le premier jeudi de l'année civile. La semaine commence un lundi. Une année compte 52 ou 53 semaines. Les derniers / premiers jours d'une année civile peuvent atterrir dans l'année suivante / précédente basée sur la semaine.

Le seul chiffre à la fin est le jour de la semaine, 1-7 pour le lundi au dimanche.

Ajoutez la classe de bibliothèque ThreeTen-Extra à votre projet pour la YearWeekclasse.


À propos java.time

Le framework java.time est intégré à Java 8 et versions ultérieures. Ces classes supplantent les anciens gênants hérités des classes date-heure tels que java.util.Date, Calendar, et SimpleDateFormat.

Le projet Joda-Time , désormais en mode maintenance , conseille la migration vers les classes java.time .

Pour en savoir plus, consultez le didacticiel Oracle . Et recherchez Stack Overflow pour de nombreux exemples et explications. La spécification est JSR 310 .

Où obtenir les classes java.time?

  • Java SE 8 , Java SE 9 et versions ultérieures
    • Intégré.
    • Partie de l'API Java standard avec une implémentation groupée.
    • Java 9 ajoute quelques fonctionnalités et corrections mineures.
  • Java SE 6 et Java SE 7
    • Une grande partie de la fonctionnalité java.time est rétroportée vers Java 6 et 7 dans ThreeTen-Backport .
  • Android

Le projet ThreeTen-Extra étend java.time avec des classes supplémentaires. Ce projet est un terrain d'essai pour d'éventuels futurs ajouts à java.time. Vous trouverez peut - être des classes utiles ici, comme Interval, YearWeek, YearQuarteret plus .

Basil Bourque
la source
2

Je sais que la question est d'obtenir le jour de la semaine sous forme de chaîne (par exemple, le nom court), mais pour quiconque recherche le jour de la semaine numérique (comme je l'étais), vous pouvez utiliser la nouvelle chaîne de format "u", prise en charge depuis Java 7. Par exemple:

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

renvoie l'index du jour de la semaine du jour, à savoir: 1 = lundi, 2 = mardi, ..., 7 = dimanche.

Sal Borrelli
la source