tiempo joda – agregar días de la semana hasta la fecha

¿Es posible agregar días de la semana a la hora de joda?

Por ejemplo, si la fecha actual es el viernes 01/03, la fecha + 1 debe regresar el lunes 04/03, en lugar de 02/03.

Por lo que sé, no hay un método incorporado para hacer esto automáticamente en Joda Time. Sin embargo, podría escribir su propio método, que incremente la fecha en un bucle hasta que llegue a un día laborable.

Tenga en cuenta que, dependiendo de lo que necesite exactamente, esto podría ser (mucho) más complicado de lo que cree. Por ejemplo, ¿debería omitir las vacaciones también? Qué días son días festivos depende del país en el que se encuentre. Además, en algunos países (por ejemplo, los países árabes), el fin de semana es el jueves y el viernes, no el sábado ni el domingo.

 LocalDate newDate = new LocalDate(); int i=0; while(i 

Tenga en cuenta que iterar agregando N días uno a la vez puede ser relativamente costoso. Para valores pequeños de N y / o código no sensible al rendimiento, esto probablemente no sea un problema. Donde sea, recomendaría minimizar las operaciones de agregar calculando cuántas semanas y días necesita ajustar de la siguiente manera:

 /** * Returns the date that is {@code n} weekdays after the specified date. * 

* Weekdays are Monday through Friday. *

* If {@code date} is a weekend, 1 weekday after is Monday. */ public static LocalDate weekdaysAfter(int n, LocalDate date) { if (n == 0) return date; if (n < 0) return weekdaysBefore(-n, date); LocalDate newDate = date; int dow = date.getDayOfWeek(); if (dow >= DateTimeConstants.SATURDAY) { newDate = date.plusDays(8 - dow); n--; } int nWeeks = n / 5; int nDays = n % 5; newDate = newDate.plusWeeks(nWeeks); return ( (newDate.getDayOfWeek() + nDays) > DateTimeConstants.FRIDAY) ? newDate.plusDays(nDays + 2) : newDate.plusDays(nDays);

Class YearMonthDay está en desuso y no deberías usarlo. Si cambia a DateTime simple, puede obtener el día de la semana llamando al:

 dateTime.getDayOfWeek(); 

Para el viernes será 5.

Uno de los enfoques puede ser hacer un método addDays personalizado que debería verse más o menos así:

 addDays(DateTime dateTime, int days) { for(int i=0;i