En plain Java, j'ai ce code pour obtenir le dernier dimanche du mois. Qu'est-ce qu'un propre et élégant fort> moyen d'obtenir le même résultat en utilisant joda-time code>
? p> p> P>
7 Réponses :
public class Time { public static void main(String[] args) { System.out.println(getNthOfMonth(DateTimeConstants.SUNDAY, DateTimeConstants.SEP, 2012)); } public static LocalDate getNthOfMonth(int day_of_week, int month, int year) { LocalDate date = new LocalDate(year, month, 1).dayOfMonth() .withMaximumValue() .dayOfWeek() .setCopy(day_of_week); if(date.getMonthOfYear() != month) { return date.dayOfWeek().addToCopy(-7); } return date; } }
Non, ce code donnera le dimanche de la dernière semaine du mois. Par exemple. Pour octobre 2012, il retournera le 4 novembre.
À droite. J'ai ajouté si la déclaration. Cela devrait maintenant être bien.
Vous pouvez essayer quelque chose comme ça: sortie: p>
Utilisez des classes Java.Time et temporaladjuster code> pour raccourcir ce code. Voir Cette réponse .
static LocalDate getNthOfMonth(int n, int day_of_week, int month, int year) { if (n == -1) { return getNthOfMonth(0, day_of_week, month + 1, year); } final LocalDate compareDate = new LocalDate(year, month, 1); if (compareDate.getDayOfWeek() > day_of_week) { return compareDate.withDayOfWeek(day_of_week).plusDays(7 * n); } else { return compareDate.withDayOfWeek(day_of_week).plusDays(7 * (n - 1)); } }
Utilisez des classes Java.Time et temporaladjuster code> pour raccourcir ce code. Voir Cette réponse .
// méthode suivante donnera le dimanche dernier du mois et de l'année donnés // obj.getlastsunday (calendrier.octobre, 2014); Code> p> p>
C'est tout à fait un ancien post mais peut-être cette réponse aidera quelqu'un. Utilisez les classes Java.Time qui remplacent Joda-Time.
private static LocalDate getNthOfMonth(int type, DayOfWeek dayOfWeek, int month, int year){ return LocalDate.now().withMonth(month).withYear(year).with(TemporalAdjusters.dayOfWeekInMonth(type, dayOfWeek)); }
avec joda
disons que nous avons une date: p> `Nous devons d'abord savoir si le mois a 31, 30, 28 ou 29 jours: DateTimeFormatter dtf = DateTimeFormat.forPattern("yyyy-MM-dd");
System.out.println(dtf.print(lastSunday);
belle explication
Java.Time Code> API Obtenez la date locale du dernier dimanche de l'année et du mois spécifiés: Strong> EM > p> afin d'y parvenir avec le API-Time-Time moderne de Java, vous pouvez passer temporaladjusters.lastinmonth (jourfweek.sunday) code>
comme une dispute à tout localdate code> de l'année et le mois spécifiés. p> xxx pré> sortie: strong> p> xxx pré> J'ai utilisé YearMonth # ATENDOFMONTH CODE > pour obtenir le localDate code>. Au lieu de cela, YearMonth # dayday code>
peut également être utilisé. P> Obtenez la date locale au nième jour-de-semaine (par exemple, 2nd jeudi) de l'année spécifiée et mois: strong> em> p> vous pouvez passer temporaladjusters # DayOfweekInmons- code>
comme un argument à tout localDate code> du . année et le mois p> 2020-12-10