57 votes

Comment puis-je obtenir le nombre de jours d'un mois donné avec Jodatime?

30 days hath September,
   April, June and November,
 All the rest have 31,
   Excepting February alone
(And that has 28 days clear,
   With 29 in each leap year).

Puis-je obtenir cette info anagrammatically? (Je ne veux pas dire le poème, bien sûr)

101voto

Erick Robertson Points 12958

Si vous avez un DateTime objet qui représente une valeur dans le mois, alors c'est assez simple. Vous obtenez l' dayOfMonth de la propriété de cette DateTime objet et d'obtenir le maximum de la valeur de la propriété. Voici un exemple de fonction:

public static int daysOfMonth(int year, int month) {
  DateTime dateTime = new DateTime(year, month, 14, 12, 0, 0, 000);
  return dateTime.dayOfMonth().getMaximumValue();
}

4voto

Jon Skeet Points 692016

Oui, mais il n'est pas aussi jolie que cela pourrait être:

import org.joda.time.*;
import org.joda.time.chrono.*;
import org.joda.time.field.*;

public class Test {
    public static void main(String[] args) {
        GregorianChronology calendar = GregorianChronology.getInstance();
        DateTimeField field = calendar.dayOfMonth();

        for (int i = 1; i < 12; i++) {
            LocalDate date = new LocalDate(2010, i, 1, calendar);
            System.out.println(field.getMaximumValue(date));
        }
    }
}

Notez que j'ai codé en dur l'hypothèse qu'il y a 12 mois, et qui nous intéresse en 2010. J'ai explicitement sélectionné le Grégorien chronologie cependant, dans d'autres chronologies, vous obtiendrez des réponses différentes, bien sûr. (Et le "12 mois" de la boucle ne serait pas une hypothèse valable, soit...)

Je suis allé pour un LocalDate plutôt qu'un DateTime afin d'aller chercher la valeur, à mettre en valeur (mais faiblement :) que la valeur ne dépend pas de la zone de temps.

Ce n'est pas aussi simple qu'il y paraît, vous l'esprit. Je ne sais pas en main ce qui se passe si l'utilisation d'une chronologie pour construire l' LocalDate, mais de solliciter le maximum de la valeur d'un champ dans une autre chronologie. J'ai quelques idées sur ce qui pourrait arriver, la connaissance d'un certain montant d'environ Joda Temps, mais ce n'est probablement pas une bonne idée :)

0voto

Benoit Courtine Points 4484
Calendar cal = Calendar.getInstance();
cal.set(Calendar.MONTH, yourMonth);
cal.set(Calendar.YEAR, yourYear);
cal.getActualMaximum(Calendar.DAY_OF_MONTH); // <-- the result!

-1voto

David.Chu.ca Points 7621

Voici une autre fonction simple:

int daysOfMonth(DateTime dt) {
    int month = dt.getMonthOfYear();
    int month2 = month;
    int days = dt.getDay();
    DateTime dt2 = dt;
    while (month == month2 ) {
       days++;
       dt2.addDays(1);
       month2 = dt2.getMonthOfYear();
    }
    return (days - 1);
}

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