Java: obtenir le nombre entier de mois à partir de la Date

Comment puis-je obtenir le mois comme un entier à partir d'un objet Date ( java.util.Date )?

133
demandé sur MR AND 2011-08-25 02:18:01
la source

7 ответов

de java.time (Java 8)

vous pouvez également utiliser le java.time package en Java 8 et de convertir votre java.util.Date objet à un java.time.LocalDate objet et puis juste utiliser le getMonthValue() méthode.

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

notez que les valeurs mensuelles 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 Basil Bourque dit dans les commentaires, la meilleure façon est d'obtenir un Month objet enum avec la LocalDate::getMonth méthode.

31
répondu Ortomala Lokni 2017-12-11 06:39:35
la source
java.util.Date date= new Date();
Calendar cal = Calendar.getInstance();
cal.setTime(date);
int month = cal.get(Calendar.MONTH);
258
répondu adarshr 2015-10-29 08:34:54
la source

si vous utilisez l'api date Java 8 , vous pouvez l'obtenir directement en une ligne!

LocalDate today = LocalDate.now();
int month = today.getMonthValue();
9
répondu Ketan Chitale 2018-03-12 16:52:29
la source

Joda-Time

alternativement, avec le Joda-Time DateTime classe.

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

... ou ...

int month = dateTime.getMonthOfYear();
7
répondu ssoward 2015-06-21 10:30:19
la source

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 par Ortomala Lokni pour l'utilisation de de java.l'heure est correcte. Et vous devrait utiliser java.temps que c'est un gigantesque amélioration par rapport à l'ancienne java.util.Date./Calendrier des classes. Voir le tutoriel Oracle sur java.temps.

je vais ajouter du code montrant comment utiliser java.le temps, sans égard à java.util.Jour, lorsque vous commencez avec frais code.

utilisant java.temps en un mot ... un Instant est un moment sur la ligne de temps en UTC. Appliquer un fuseau horaire ( ZoneId ) pour obtenir un ZonedDateTime .

la classe Month est une classe sophistiquée enum à représentent un mois en général. Cet enum a des méthodes pratiques telles que d'obtenir un nom localisé. Et soyez assurés que le nombre de mois en java.le temps est sain, 1-12, pas le non-sens à base zéro (0-11) trouvé en java.util.Date./Calendrier.

pour obtenir la date-heure actuelle, fuseau horaire est crucial. À tout moment, la date est pas le même dans le monde entier. Donc le mois n'est pas la même partout dans le monde si près de la fin/début de 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.
String monthName = month.getDisplayName( TextStyle.FULL , Locale.CANADA_FRENCH );

à Propos de de java.heure

Le de java.time framework est construit dans Java 8 et plus tard. Ces classes remplacent les anciennes classes de date legacy telles que java.util.Date , Calendar , & SimpleDateFormat .

le projet Joda-Time , maintenant en mode maintenance , conseille la migration vers le java.temps classes.

pour en savoir plus, voir le Oracle Tutorial . Et rechercher le débordement de la pile pour de nombreux exemples et explications. La spécification est JSR 310 .

vous pouvez échanger java.temps objets directement avec votre base de données. Utiliser un JDBC driver conforme à JDBC 4.2 ou plus tard. Pas besoin de Chaînes, pas besoin de classes java.sql.* .

où obtenir le java.les classes de temps?

le projet ThreeTen-Extra s'étend Java.temps avec des cours supplémentaires. Ce projet est un terrain d'expérimentation pour d'éventuelles futures additions à java.temps. Vous pouvez trouver ici quelques cours utiles tels que: Interval , YearWeek , YearQuarter , et plus .

4
répondu Basil Bourque 2018-04-15 00:15:29
la source

si vous ne pouvez pas utiliser le temps Joda et que vous vivez encore dans le monde obscur:) (Java 5 ou inférieur ) vous pouvez en profiter:

Note: assurez-vous que votre date est déjà faite selon 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));
}
2
répondu Badr DRAIFI 2018-03-12 16:57:50
la source
Date mDate = new Date(System.currentTimeMillis());
mDate.getMonth() + 1

la valeur retournée commence à 0, Vous devez donc en ajouter une au résultat.

0
répondu twlkyao 2015-05-13 04:02:01
la source

Autres questions sur