363 votes

Obtenir la valeur entière de l'année en cours en Java

Je dois déterminer l'année actuelle en Java sous forme d'entier. Je pourrais simplement utiliser java.util.Date(), mais c'est obsolète.

4 votes

Non, java.util.Date n'est pas obsolète, du moins pas à partir de Java 8. Certaines de ses méthodes sont obsolètes mais pas l'ensemble de la classe. Cependant, vous devriez éviter à la fois java.util.Date et java.util.Calendar car ils sont notoirement problématiques, confus et défectueux. Utilisez plutôt soit java.time (en Java 8) ou Joda-Time.

754voto

cagcowboy Points 13721

Pour Java 8 et ultérieur :

int year = Year.now().getValue();

Pour les anciennes versions de Java :

int year = Calendar.getInstance().get(Calendar.YEAR);

2 votes

Après avoir vu votre réponse, le Calendrier serait un objet intéressant à utiliser. Je cherchais une solution plus concise et je ne pensais pas que le Calendrier aurait cela pour moi. Je me suis trompé ! Merci !

1 votes

Que se passe-t-il en cas de concurrence, que se passe-t-il si un autre thread/une autre partie du code de la bibliothèque modifie l'heure actuelle ? Ne serait-il pas raisonnable de le modifier de la manière suivante : Calendar c = Calendar.getInstance(); synchronized (c) {c.setTimeInMillis(System.currentTimeMillis()); return c.get(Calendar.YEAR);}

1 votes

Cela renvoie une valeur différente dans les différentes versions d'Android. Je compare Android v4.1.2 avec v4.2.1.

29voto

toolkit Points 27248

Ce plus simple (utilisant Calendar, désolé) est :

 int year = Calendar.getInstance().get(Calendar.YEAR);

Il existe également le nouveau Date and Time API JSR, ainsi que Joda Time

0 votes

Cela renvoie une valeur différente dans les différentes versions d'Android. Je compare Android v4.1.2 avec v4.2.1.

1 votes

@toobsco42 - essayez de rechercher "android calendrier.bug de l'année" sur Google

0 votes

Salut @toolkit, j'ai fait des recherches sans succès. J'espérais une réponse plus précise.

14voto

conmulligan Points 3207

La manière la plus facile est d'obtenir l'année à partir de Calendar.

// l'année est stockée en tant que membre statique
int année = Calendar.getInstance().get(Calendar.YEAR);

0 votes

Calendar.YEAR n'est pas l'année en cours.

0 votes

Calendar.YEAR est défini ainsi...
public final static int YEAR = 1;

2 votes

La API get() sur Calendar récupère la donnée qui se trouve dans le champ spécifié par la constante. L'année est située dans le champ des unités dans l'objet Calendar! Calendar.getInstance() récupère la date actuelle. java.sun.com/j2se/1.4.2/docs/api/java/util/…

10voto

basZero Points 918

Si vous voulez l'année de tout objet date, j'ai utilisé la méthode suivante :

public static int getYearFromDate(Date date) {
    int result = -1;
    if (date != null) {
        Calendar cal = Calendar.getInstance();
        cal.setTime(date);
        result = cal.get(Calendar.YEAR);
    }
    return result;
}

0 votes

Le résultat est 1970 !

4voto

Alan Points 4249

Si votre application utilise intensivement des objets Date et Calendar, vous devriez vraiment utiliser Joda Time, car java.util.Date est mutable. java.util.Calendar a des problèmes de performances lorsque ses champs sont mis à jour, et est maladroit pour l'arithmétique des dates et heures.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X