Java: Obtenir le mois entier à partir de la date

Comment puis-je obtenir le mois sous forme d’entier à partir d’un object Date ( java.util.Date )?

java.time (Java 8)

Vous pouvez également utiliser le package java.time dans Java 8 et convertir votre object java.util.Date object java.time.LocalDate , puis utiliser simplement la méthode getMonthValue() .

 Date date = new Date(); LocalDate localDate = date.toInstant().atZone(ZoneId.systemDefault()).toLocalDate(); int month = localDate.getMonthValue(); 

Notez que les valeurs de mois sont ici données de 1 à 12 contrairement à cal.get(Calendar.MONTH) dans la réponse d’adarshr qui donne des valeurs de 0 à 11.

Mais comme l’a dit Basil Bourque dans les commentaires, la méthode privilégiée consiste à obtenir un object Month enum avec la méthode LocalDate::getMonth .

 java.util.Date date= new Date(); Calendar cal = Calendar.getInstance(); cal.setTime(date); int month = cal.get(Calendar.MONTH); 

Si vous utilisez Java 8 Date API, vous pouvez directement l’obtenir en une seule ligne!

 LocalDate today = LocalDate.now(); int month = today.getMonthValue(); 

Joda-Time

Alternativement, avec la classe Joda-Time DateTime .

 //convert date to datetime DateTime datetime = new DateTime(date); int month = Integer.parseInt(datetime.toSsortingng("MM")) 

…ou…

 int month = dateTime.getMonthOfYear(); 

tl; dr

 myUtilDate.toInstant() // Convert from legacy class to modern. `Instant` is a point on the timeline in UTC. .atZone( // Adjust from UTC to a particular time zone to determine date. Renders a `ZonedDateTime` object. ZoneId.of( "America/Montreal" ) // Better to specify desired/expected zone explicitly than rely implicitly on the JVM's current default time zone. ) // Returns a `ZonedDateTime` object. .getMonthValue() // Extract a month number. Returns a `int` number. 

java.time Détails

La réponse d’Ortomala Lokni pour l’utilisation de java.time est correcte. Et vous devriez utiliser java.time car c’est une amélioration gigantesque par rapport aux anciennes classes java.util.Date/.Calendar. Voir le didacticiel Oracle sur java.time.

Je vais append du code montrant comment utiliser java.time sans tenir compte de java.util.Date, lorsque vous commencez avec du code frais.

Utiliser java.time en quelques mots… Un Instant est un moment de la chronologie en UTC. Appliquez un fuseau horaire ( ZoneId ) pour obtenir un ZonedDateTime .

La classe Month est un enum sophistiqué pour représenter un mois en général. Ce enum a des méthodes pratiques telles que l’obtention d’un nom localisé. Et soyez assuré que le numéro de mois dans java.time est un numéro sain, 1-12, pas le non-sens zéro (0-11) trouvé dans java.util.Date/.Calendar.

Pour obtenir la date-heure actuelle, le fuseau horaire est crucial. À tout moment, la date n’est pas la même dans le monde entier. Par conséquent, le mois n’est pas le même dans le monde entier si vous vous trouvez près de la fin ou du début du mois.

 ZoneId zoneId = ZoneId.of( "America/Montreal" ); // Or 'ZoneOffset.UTC'. ZonedDateTime now = ZonedDateTime.now( zoneId ); Month month = now.getMonth(); int monthNumber = month.getValue(); // Answer to the Question. Ssortingng monthName = month.getDisplayName( TextStyle.FULL , Locale.CANADA_FRENCH ); 

À propos de java.time

Le framework java.time est intégré à Java 8 et versions ultérieures. Ces classes supplantent les anciennes classes de date / heure héritées telles que java.util.Date , Calendar et SimpleDateFormat .

Le projet Joda-Time , maintenant en mode maintenance , conseille la migration vers les classes java.time .

Pour en savoir plus, consultez le didacticiel Oracle . Et recherchez Stack Overflow pour de nombreux exemples et explications. La spécification est JSR 310 .

Vous pouvez échanger des objects java.time directement avec votre firebase database. Utilisez un pilote JDBC compatible avec JDBC 4.2 ou version ultérieure. Pas besoin de chaînes, pas besoin de classes java.sql.* .

Où obtenir les classes java.time?

  • Java SE 8 , Java SE 9 , Java SE 10 et versions ultérieures
    • Intégré
    • Partie de l’API Java standard avec une implémentation intégrée.
    • Java 9 ajoute quelques fonctionnalités et corrections mineures.
  • Java SE 6 et Java SE 7
    • Une grande partie de la fonctionnalité java.time est transférée vers Java 6 et 7 dans ThreeTen-Backport .
  • Android
    • Versions ultérieures des implémentations de bundles Android des classes java.time.
    • Pour Android antérieur (<26), le projet ThreeTenABP adapte ThreeTen-Backport (mentionné ci-dessus). Voir Comment utiliser ThreeTenABP… .

Le projet ThreeTen-Extra étend java.time avec des classes supplémentaires. Ce projet est un terrain d’essai pour d’éventuels ajouts futurs à java.time. Vous pouvez y trouver des classes utiles telles que Interval , YearWeek , YearQuarter , etc.

Si vous ne pouvez pas utiliser le temps Joda et que vous vivez toujours dans le monde sombre 🙂 (Java 5 ou inférieur), vous pouvez profiter de ceci:

Note: Assurez-vous que votre date est déjà faite par le format: jj / MM / AAAA

 /** Make an int Month from a date */ public static int getMonthInt(Date date) { SimpleDateFormat dateFormat = new SimpleDateFormat("MM"); return Integer.parseInt(dateFormat.format(date)); } /** Make an int Year from a date */ public static int getYearInt(Date date) { SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy"); return Integer.parseInt(dateFormat.format(date)); } 
 Date mDate = new Date(System.currentTimeMillis()); mDate.getMonth() + 1 

La valeur renvoyée commence à 0, vous devez donc en append un au résultat.