176 votes

Nombre de jours dans un mois donné d'une année donnée ?

Comment savoir combien de jours a tel mois de telle année ?

String date = "2010-01-19";
String[] ymd = date.split("-");
int year = Integer.parseInt(ymd[0]);
int month = Integer.parseInt(ymd[1]);
int day = Integer.parseInt(ymd[2]);
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.YEAR,year);
calendar.set(Calendar.MONTH,month);
int daysQty = calendar.getDaysNumber(); // Something like this

7 votes

Quelle est exactement votre question ?

1 votes

Pour votre information, les anciennes classes de date et d'heure terriblement gênantes telles que java.util.Date , java.util.Calendar y java.text.SimpleDateFormat sont maintenant héritage supprimé par le java.time intégrées à Java 8 et aux versions ultérieures. Voir Tutoriel par Oracle .

404voto

Hemant Metalia Points 8325

Java 8 et plus

@Warren M. Nocos. Si vous essayez d'utiliser la nouvelle fonction de Java 8 API date et heure vous pouvez utiliser java.time.YearMonth classe. Voir Tutoriel Oracle .

// Get the number of days in that month
YearMonth yearMonthObject = YearMonth.of(1999, 2);
int daysInMonth = yearMonthObject.lengthOfMonth(); //28  

Test : essayez un mois dans une année bissextile :

yearMonthObject = YearMonth.of(2000, 2);
daysInMonth = yearMonthObject.lengthOfMonth(); //29 

Java 7 et antérieur

Créer un calendrier, définir l'année et le mois et utiliser getActualMaximum

int iYear = 1999;
int iMonth = Calendar.FEBRUARY; // 1 (months begin with 0)
int iDay = 1;

// Create a calendar object and set year and month
Calendar mycal = new GregorianCalendar(iYear, iMonth, iDay);

// Get the number of days in that month
int daysInMonth = mycal.getActualMaximum(Calendar.DAY_OF_MONTH); // 28

Test : essayez un mois dans une année bissextile :

mycal = new GregorianCalendar(2000, Calendar.FEBRUARY, 1);
daysInMonth= mycal.getActualMaximum(Calendar.DAY_OF_MONTH);      // 29

2 votes

Comment faire cela avec la nouvelle API Date et Heure de Java 8 ?

2 votes

@WarrenM.Nocos désolé pour la réponse tardive, mais je n'étais pas actif ces derniers mois. veuillez vérifier l'édition pour la solution pour java 8.

0 votes

Quant à ce qui est antérieur à Java 8 Une grande partie de la java.time est rétrocompatible avec Java 6 et Java 7 dans l'interface utilisateur. Trois Dix-Backport projet. Adaptation ultérieure pour Android dans le ThreeTenABP projet. Voir Comment utiliser ThreeTenABP .

45voto

Jon Skeet Points 692016

Code pour java.util.Calendar

Si vous devez utiliser java.util.Calendar Je pense que vous voulez :

int days = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);

Code pour Joda Time

Personnellement, cependant, je suggérerais d'utiliser Joda Time au lieu de java.util.{Calendar, Date} pour commencer, auquel cas vous pourriez utiliser :

int days = chronology.dayOfMonth().getMaximumValue(date);

Notez que plutôt que d'analyser les valeurs de chaîne individuellement, il serait préférable d'obtenir l'API de date/heure que vous utilisez pour l'analyser. Dans java.util.* vous pouvez utiliser SimpleDateFormat ; dans Joda Time, vous utiliseriez un fichier DateTimeFormatter .

29voto

Aleks G Points 25412

Vous pouvez utiliser Calendar.getActualMaximum méthode :

Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.YEAR, year);
calendar.set(Calendar.MONTH, month);
int numDays = calendar.getActualMaximum(Calendar.DATE);

7voto

zoidbot Points 53
if (month == 4 || month == 6 || month == 9 || month == 11) {
   daysInMonth = 30;
} else if (month == 2) {
    daysInMonth = (leapYear) ? 29 : 28;
else { 
    daysInMonth = 31;
}

0 votes

Calendar c = Calendar.getInstance();c.set(Calendar.DAY_OF_MONTH, c.getActualMaximum(Calendar.DAY_OF_MONTH)) ; // vous pouvez définir l'année avant d'obtenir le maximum réel car ils pourraient ne pas être les mêmes. Par exemple, février 2011 et 2012 n'ont pas la même longueur (année bissextile).

0voto

madhi vanan Points 11
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

/*
 * 44. Return the number of days in a month
 * , where month and year are given as input.
 */
public class ex44 {
    public static void dateReturn(int m,int y)
    {
        int m1=m;
        int y1=y;
        String str=" "+ m1+"-"+y1;
        System.out.println(str);
        SimpleDateFormat sd=new SimpleDateFormat("MM-yyyy");

        try {
            Date d=sd.parse(str);
            System.out.println(d);
            Calendar c=Calendar.getInstance();
            c.setTime(d);
            System.out.println(c.getActualMaximum(Calendar.DAY_OF_MONTH));
        } catch (ParseException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }
    public static void main(String[] args) {
dateReturn(2,2012);

    }

}

1 votes

Quelle valeur cette réponse apporte-t-elle par rapport aux réponses existantes et acceptées ? Veuillez également ajouter une explication ou une narration avec votre code. StackOverflow est plus qu'une bibliothèque de snippets.

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