2010-03-11 6 views
4

En ce moment, je crée une application de planification java et je me demandais comment trouver le jour de la semaine en cours en utilisant la classe Calendrier pour obtenir le premier jour de la semaine .Java: obtenir la valeur actuelle du jour de la semaine

Voici la méthode que je me sers dans une classe afin de mettre en place un calendrier de la semaine

public static String getSunday() { 
    SimpleDateFormat d = new SimpleDateFormat(dayDate); 
    Calendar specific = cal; 
    specific.add(Calendar.DAY_OF_YEAR, (cal.getFirstDayOfWeek() - ??)); 
    return d.format(specific.getTime()); 
} 
+1

Il n'est pas tout à fait clair ce que vous essayez de faire ici. Votre méthode s'appelle "dimanche". Il renvoie une chaîne de date formatée pour un calendrier qui contient une date de départ non spécifiée et avance un nombre de jours calculé en soustrayant quelque chose du premier jour de la semaine. Quelle est la date de début? Qu'essayez-vous de retourner? –

+0

cal est créé sous la classe Calendar qui récupère l'instance. Il est initialisé sous le constructeur et ce que j'essayais de faire était aligner les dates des jours "3/11" sous le jour approprié "thurs". – TLM

Répondre

6

Vous pouvez obtenir le jour de la semaine en appelant get() avec Calendar.DAY_OF_WEEK

public int getTodaysDayOfWeek() { 
    final Calendar c = Calendar.getInstance(); 
    return c.get(Calendar.DAY_OF_WEEK); 
} 

En outre, même si je ne suis pas sûr de comprendre exactement ce que vous essayez de faire, il me semble louche. (Qu'est-ce cal par exemple?)

+0

Désormais obsolète. Les vieilles classes date-heure gênantes telles que ['java.util.Date'] (https://docs.oracle.com/javase/8/docs/api/java/util/Date.html), [' java. util.Calendar'] (https://docs.oracle.com/javase/8/docs/api/java/util/Calendar.html), et 'java.text.SimpleTextFormat' sont maintenant [ancien] (https://en.wikipedia.org/wiki/Legacy_system), supplanté par les classes [java.time] (https://docs.oracle.com/javase/8/docs/api/java/time/package-summary.html) . Voir [Tutoriel Oracle] (https://docs.oracle.com/javase/tutorial/datetime/TOC.html). –

+0

@BasilBourque bien la réponse est de 2010 :) – Pointy

1

tl; dr

comment trouver le jour de la semaine

DayOfWeek.from(LocalDate.now()) 

mis en place un calendrier de la semaine

LocalDate sunday = 
    LocalDate.now() 
      .with(TemporalAdjusters.nextOrSame(DayOfWeek.SUNDAY)) ; 

LocalDate monday = sunday.plusDays(1) ; 
LocalDate tuesday = monday.plusDays(1) ; 
… 

Détails

La Question et les autres réponses utilisent des classes démodées.

Les anciennes classes date-heure sont mal conçues, déroutantes et gênantes. Évite-les.

java.time

En Java 8 et plus tard, nous utilisons le cadre de java.time intégré. Une grande partie de la fonctionnalité est back-ported à Java 6 (TripleTort-Backport) et ensuite adaptée à Android (ThreeTenABP).

Un Instant représente le moment actuel en UTC avec une résolution pouvant aller jusqu'à nanosecondes.

Instant instant = Instant.now(); 

Pour obtenir le jour de la semaine, nous devons déterminer la date. Le fuseau horaire est crucial pour déterminer la date car la date peut varier autour du globe pour un moment donné. Par exemple, quelques minutes après minuit à Paris est un nouveau jour, alors qu'à Montréal c'est encore «hier».

Utilisez ZoneId pour représenter un fuseau horaire. Demander un proper time zone name au format continent/region. N'utilisez jamais les abréviations de 3 à 4 lettres couramment vues dans les médias grand public car ce ne sont pas de vrais fuseaux horaires, pas standardisés, et ils ne sont même pas uniques (!).

ZoneId zoneId = ZoneId.of("America/Montreal"); 
ZonedDateTime zdt = ZonedDateTime.ofInstant(instant , zoneId); 

Utilisez le DayOfWeek pratique ENUM pour déterminer le jour de la semaine.

DayOfWeek dow = DayOfWeek.from(zdt); 

Vous pouvez interroger l'objet DayOfWeek.

Vous pouvez ask for a number de 1 à 7 où 1 est lundi et 7 est dimanche selon la norme ISO 8601.Mais ne passez pas ce numéro autour de votre code; Au lieu de cela, passez autour de DayOfWeek objets pour profiter des avantages de la sécurité de type et des valeurs valides garanties.

int dowNumber = dow.getValue(); 

Vous pourriez vouloir du texte, le nom du jour de la semaine. Laissez java.time traduire automatiquement le nom dans un langage humain. A Locale espèces qui langage humain, et spécifie également les normes culturelles à utiliser telles que la façon d'abréger et de capitaliser. L'enum TextStyle indique combien de temps un nom vous voulez.

Locale locale = Locale.CANADA_FRENCH; 
String output = dow.getDisplayName(TextStyle.FULL , locale); 

Pour obtenir le début de la semaine, demandez le lundi précédent (ou le dimanche, peu importe), ou le bâton aujourd'hui si elle est un lundi. Utilisez une implémentation TemporalAdjuster trouvée dans la classe TemporalAdjusters.

LocalDate startOfWeek = zdt.toLocalDate().with(TemporalAdjusters.previousOrSame(DayOfWeek.MONDAY)); 

Si vous avez besoin d'une date-heure plutôt que la date seule, demander java.time pour obtenir le premier moment de la journée (pas toujours le temps 00:00:00).

ZonedDateTime zdtWeekStart = startOfWeek.atStartOfDay(zoneId); 

A propos java.time

Le cadre java.time est construit en Java 8 et versions ultérieures. Ces classes supplantent les classes date de temps anciens legacy gênants tels 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.

Questions connexes