En Java, comment obtenir des chaînes de jours de la semaine (Sun, Mon, ..., Sat) avec les paramètres régionaux par défaut du système (langue)
Le moyen le plus simple:
String[] namesOfDays = new String[7] {
"SUN", "MON", "TUE", "WED", "THU", "FRI", "SAT"
};
Cette méthode n'utilise pas les paramètres régionaux. Par conséquent, si la langue du système n'est pas l'anglais, cette méthode ne fonctionne pas correctement.
En utilisant Joda time, 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 d'aujourd'hui, qui sont inutiles pour le but final. Aussi, c'est un peu compliqué.
Existe-t-il un moyen facile d'obtenir des chaînes comme "Sun"
, "Mon"
, ..., "Sat"
avec les paramètres régionaux par défaut du système?
5 réponses
Si Je ne vous ai pas mal compris
calendar.getDisplayName(Calendar.DAY_OF_WEEK, Calendar.SHORT, Locale.US);
Est ce que vous cherchez. ici Vous pouvez trouver la documentation,
Ou vous pouvez aussi utiliser, getShortWeekdays()
String[] namesOfDays = DateFormatSymbols.getInstance().getShortWeekdays()
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 de réaliser ce que vous voulez.
Tl; dr
DayOfWeek.MONDAY.getDisplayName(
TextStyle.SHORT ,
Locale.getDefault()
)
Java.temps
Le projet Joda-Time , maintenant en mode de maintenance , conseille la migration vers le java .temps classes. Une grande partie de java.le temps est de retour-porté 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, y compris getDisplayName
pour générer une chaîne avec un nom de jour localisé.
Pour localiser, spécifiez:
-
TextStyle
pour déterminer combien de temps ou abrégé devrait être la chaîne. -
Locale
déterminer (a) le langage humain pour la traduction du nom du jour, du nom du mois et autres, et (b) les normes culturelles déterminant les questions d'abréviation, de Majuscule, de ponctuation, de séparateurs et autres.
Exemple:
String output = DayOfWeek.MONDAY.getDisplayName( TextStyle.SHORT , Locale.CANADA_FRENCH );
Vous pouvez utiliser le fuseau horaire par défaut actuel de la JVM plutôt que d'en spécifier un. Mais gardez à l'esprit le risque: le la zone par défaut peut être modifiée à tout moment pendant l'exécution par n'importe quel code dans n'importe quel thread 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.temps
Le java.le framework time est intégré à Java 8 et versions ultérieures. Ces classes permettent d'éviter la pénible vieux héritage date-heure classes telles que java.util.Date
, Calendar
, & SimpleDateFormat
.
Le projetJoda-Time , maintenant enmode de maintenance , conseille migration vers le java .temps classes.
Pour en savoir plus, consultez le tutoriel Oracle. Et recherchez le débordement de pile pour de nombreux exemples et explications. La spécification est JSR 310 .
Où obtenir le java.les classes de temps?
-
Java SE 8 et SE 9 et plus tard
- intégré.
- fait partie de L'API Java standard avec une implémentation groupée.
- Java 9 ajoute quelques mineurs caractéristiques et corrections.
-
Java SE 6 et SE 7
- une grande partie de java.la fonctionnalité time est de nouveau portée sur Java 6 et 7 dans ThreeTen-Backport.
-
Android
- Le Troisetenabp projet adapte ThreeTen-Backport (mentionné ci-dessus) pour Android spécifiquement.
- Voir Comment utiliser ThreeTenABP....
Sans 1.8, vous pouvez utiliser DateFormatSymbols
(qui travaille également avec Android).
DateFormatSymbols.getWeekdays()
Renvoie: les chaînes du jour de la semaine. Utilisation De L'Application Calendrier.DIMANCHE, de Calendrier.LUNDI, etc. pour indexer le tableau de résultats.
Veuillez essayer ceci
public static String[] namesOfDays = {"SUN", "MON", "TUE", "WED", "THU", "FRI", "SAT"};
int day = Calendar.getInstance().get(Calendar.DAY_OF_WEEK);
System.out.println("Day := "+namesOfDays[day-1]);