web-dev-qa-db-fra.com

En Java, comment obtenir les chaînes de jours de la semaine (dimanche, lundi, ..., samedi) avec la langue par défaut du système

Le moyen le plus simple:

String[] namesOfDays = new String[7] {
    "Sun", "MON", "TUE", "WED", "THU", "FRI", "SAT"
};

Cette méthode n'utilise pas Locale. Par conséquent, si la langue du système n'est pas l'anglais, cette méthode ne fonctionne pas correctement.

En utilisant le temps Joda, nous pouvons faire comme ceci:

String[] namesOfDays = new String[7];
LocalDate now = new LocalDate();

for (int i=0; i<7; i++) {
    /* DateTimeConstants.MONDAY = 1, TUESDAY = 2, ..., SUNDAY = 7 */
    namesOfDays[i] = now.withDayOfWeek((DateTimeConstants.SUNDAY + i - 1) % 7 + 1)
        .dayOfWeek().getAsShortText();
}

Cependant, cette méthode utilise les calculs de date et de calendrier actuels, qui sont inutiles pour le but final. En outre, c'est un peu compliqué.

Existe-t-il un moyen simple d'obtenir des chaînes comme "Sun", "Mon", ..., "Sat" avec les paramètres régionaux par défaut du système?

26
Naetmul

Si je ne vous ai pas mal compris

 calendar.getDisplayName(Calendar.DAY_OF_WEEK, Calendar.SHORT, Locale.US);

est ce que vous recherchez. Ici vous pouvez trouver la documentation,

Ou vous pouvez également utiliser getShortWeekdays ()

String[] namesOfDays = DateFormatSymbols.getInstance().getShortWeekdays()
44
Blackbelt
Date now = new Date();
// EEE gives short day names, EEEE would be full length.
SimpleDateFormat dateFormat = new SimpleDateFormat("EEE", Locale.US); 
String asWeek = dateFormat.format(now);

Vous pouvez créer la date avec la date et l'heure souhaitées. Et réalisez ce que vous voulez.

8
Juned Ahsan

tl; dr

DayOfWeek.MONDAY.getDisplayName( 
    TextStyle.SHORT , 
    Locale.getDefault() 
)

Java.time

Le projet Joda-Time , désormais en mode maintenance , conseille de migrer vers les classes Java.time . Une grande partie de Java.time est rétroportée sur Android (voir ci-dessous).

DayOfWeek

L'énumération DayOfWeek définit sept objets, un pour chaque jour de la semaine. La classe propose plusieurs méthodes pratiques, dont getDisplayName, pour générer une chaîne avec un nom de jour localisé.

Pour localiser, spécifiez:

  • TextStyle pour déterminer la longueur ou l'abréviation de la chaîne.
  • Locale déterminer (a) la langue humaine pour la traduction du nom du jour, du nom du mois, etc., et (b) les normes culturelles déterminant les questions d'abréviation, de majuscule, de ponctuation, de séparateur, etc.

Exemple:

String output = DayOfWeek.MONDAY.getDisplayName( TextStyle.SHORT , Locale.CANADA_FRENCH );

Vous pouvez utiliser le fuseau horaire actuel par défaut de la machine virtuelle Java plutôt que d’en spécifier un. Mais gardez à l'esprit le risque: la zone par défaut peut être modifiée à tout moment pendant l'exécution par n'importe quel code de n'importe quel fil de n'importe quelle application s'exécutant dans la JVM.

Locale locale = Locale.getDefault() ;
String output = DayOfWeek.MONDAY.getDisplayName( TextStyle.SHORT , locale );

À propos de Java.time

Le cadre Java.time est intégré à Java 8 et versions ultérieures. Ces classes supplantent les anciennes classes gênantes héritées _ date-heure telles que Java.util.Date , Calendar _, & SimpleDateFormat .

Le projet Joda-Time , désormais en mode maintenance , conseille de migrer vers les classes Java.time .

Pour en savoir plus, consultez le Tutoriel 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 et SE 9 et versions ultérieures
    • Intégré. 
    • Une partie de l'API Java standard avec une implémentation fournie.
    • Java 9 ajoute quelques fonctionnalités et corrections mineures.
  • Java SE 6 et SE 7
    • Une grande partie de la fonctionnalité Java.time est rétroportée vers Java 6 et 7 dans ThreeTen-Backport .
  • Android
4
Basil Bourque

Sans 1.8, vous pouvez utiliser DateFormatSymbols (qui fonctionne également avec Android).

DateFormatSymbols.getWeekdays()

Retours: les chaînes du jour de la semaine. Utilisez Calendar.SUNDAY, Calendar.MONDAY, etc. pour indexer le tableau de résultats.

0
yincrash