165 votes

dernier jour du mois de calcul

Je vais avoir des problèmes avec le calcul de quand le prochain le Dernier Jour du Mois est une notification qui doit être envoyé.

Voici mon code:

RecurrenceFrequency recurrenceFrequency = notification.getRecurrenceFrequency();
Calendar nextNotifTime = Calendar.getInstance();

C'est la ligne à l'origine de problèmes je pense:

nextNotifTime.add(recurrenceFrequency.getRecurrencePeriod(), 
                  recurrenceFrequency.getRecurrenceOffset());

Comment puis-je utiliser le Calendrier pour configurer correctement le dernier jour du mois suivant la notification?

378voto

AlexR Points 60796

Calendar.getInstance().getActualMaximum(Calendar.DAY_OF_MONTH);

Cela renvoie réelle maximale pour le mois en cours. Par exemple, il est de février d'une année bissextile, ce qui revient le 29.

40voto

ilknurk Points 441

Et pour obtenir le dernier jour que la Date objet:

Calendar cal = Calendar.getInstance();
cal.set(Calendar.DATE, cal.getActualMaximum(Calendar.DATE));

Date lastDayOfMonth = cal.getTime();

22voto

Mike Deck Points 7443

Vous pouvez définir le calendrier pour le premier du mois prochain, puis de soustraire un jour.

Calendar nextNotifTime = Calendar.getInstance();
nextNotifTime.add(Calendar.MONTH, 1);
nextNotifTime.set(Calendar.DATE, 1);
nextNotifTime.add(Calendar.DATE, -1);

Après l'exécution de ce code nextNotifTime sera fixée au dernier jour du mois en cours. Gardez à l'esprit si aujourd'hui est le dernier jour du mois, l'effet net de ce code est que le Calendrier de l'objet reste inchangé.

18voto

La suite donnera toujours des résultats corrects:

    Calendar cal = Calendar.getInstance();
    cal.set(Calendar.MONTH, ANY_MONTH);
    cal.set(Calendar.YEAR, ANY_YEAR);
    cal.set(Calendar.DAY_OF_MONTH, 1);// This is necessary to get proper results
    cal.set(Calendar.DATE, cal.getActualMaximum(Calendar.DATE));
    cal.getTime();

3voto

Bruno Points 66

Regardez l' getActualMaximum(int field) méthode du Calendrier de l'objet.

Si vous définissez votre Calendrier de l'objet à être dans le mois pour lequel vous cherchez le dernier jour, alors getActualMaximum(Calendar.DAY_OF_MONTH) vous donnera le dernier jour.

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