tl; dr
Héritage façon de déterminer le jour de la semaine numéro défini ISO 8601 (lundi au dimanche 1-7):
int dayOfWeekISO = cal.get(Calendar.DAY_OF_WEEK) - 1 ;
if(dayOfWeekISO == 0) { // For Sunday (1 - 1 = 0), add 7.
dayOfWeekISO = (dayOfWeekISO + 1) ;
}
façon moderne:
LocalDate.of(2017 , Month.JULY , 30) // Date-only value.
.getDayOfWeek() // `DayOfWeek.SUNDAY` enum object.
.getValue() // 7 for Sunday. (1 = Monday, per ISO 8601 standard.)
Détails
Le accepted answer by Maia est correct: Those int
constants on Calendar
définir la semaine comme 1-7 pour Sunday -Saturday, selon la coutume aux États-Unis.
DAY_OF_WEEK
public static final int DAY_OF_WEEK
numéro de champ pour obtenir et définir indiquant le jour de la semaine. Ce champ prend des valeurs dimanche, lundi, mardi, mercredi, jeudi, vendredi et samedi.
Si vous ne pouvez absolument pas ajouter une bibliothèque, vous devez régler de la définition Calendar
d'une semaine étant dimanche samedi 1-7. Pour mettre de l'argent en premier lieu, soustrayez 1, puis vérifiez 0 auquel vous ajoutez 7.
int dayOfWeekISO = cal.get(Calendar.DAY_OF_WEEK) - 1 ;
if(dayOfWeekISO == 0) { // For Sunday (1 - 1 = 0), add 7.
dayOfWeekISO = (dayOfWeekISO + 1) ;
}
Par la voie à suivre dans l'autre sens, de ISO 8601 style à l'américaine (premier dimanche), calculer modulo 7 puis, plus 1.
(DayOfWeek.SUNDAY.getValue() % 7) + 1
Comme ceci:
System.out.println((DayOfWeek.SUNDAY.getValue() % 7) + 1) ;
System.out.println((DayOfWeek.MONDAY.getValue() % 7) + 1) ;
System.out.println((DayOfWeek.TUESDAY.getValue() % 7) + 1) ;
System.out.println((DayOfWeek.WEDNESDAY.getValue() % 7) + 1) ;
System.out.println((DayOfWeek.THURSDAY.getValue() % 7) + 1) ;
System.out.println((DayOfWeek.FRIDAY.getValue() % 7) + 1) ;
System.out.println((DayOfWeek.SATURDAY.getValue() % 7) + 1) ;
Mais ne pensez à ajouter a library of modern date-time classes. Cela vaut la peine d'ajouter un pot à votre projet. Ces vieilles classes de date-heure sont vraiment misérables.
Évitez les classes date temps anciens
La classe
Calendar
est une partie des classes date de temps, gênants héritage vieux maintenant supplanté par les classes de java.time.
java.time
Le java.time.DayOfWeek
ENUM est standard, ce qui représente une semaine définie par ISO 8601 où une semaine se déroulera du lundi au dimanche, numérotées 1-7.
La classe LocalDate
représente une valeur de date uniquement sans heure et sans fuseau horaire.
LocalDate ld = LocalDate.of(2017 , Month.JULY , 30) ;
DayOfWeek dow = ld.getDayOfWeek() ;
int dowNumber = dow.getValue() ;
String output = dow.getDisplayName(TextStyle.FULL , Locale.CANADA_FRENCH) ;
Voir this code run live at IdeOne.com.
ld.toString(): 30.07.2017
dow.toString(): dimanche
dowNumber: 7
sortie: dimanche
A propos de java.time
Le framework java.time est intégré à Java 8 et versions ultérieures. Ces classes supplantent les vieilles classes de date-heure legacy gênantes telles que java.util.Date
, Calendar
, & SimpleDateFormat
. Le projet Joda-Time, maintenant en maintenance mode, conseille la migration vers les classes java.time.
Pour en savoir plus, voir le Oracle Tutorial. 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 plus tard
- 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é de java.time est de retour à Java 6 Ported .
- Android
Le projet ThreeTen-Extra java.time étend avec des classes supplémentaires. Ce projet est un terrain d'essai pour d'éventuels ajouts futurs à java.time. Vous pouvez trouver ici des classes utiles telles que Interval
, YearWeek
, YearQuarter
et more.
Bien sûr, vous avez raison. Pas d'énumération, constantes. J'ai changé la réponse selon ceci. – Maia