online joda examples java calendar jodatime weekday

java - examples - Joda Time: primer día de la semana?



joda-time examples (6)

¿Entonces su pregunta es cómo obtener DayOfWeek de un objeto Joda DateTime? ¿Qué tal esto?

DateTime dt = new DateTime().withYear(2009).plusDays(111); dt.toGregorianCalendar().getFirstDayOfWeek();

¿Cómo se obtiene el primer día de la semana con un Locale usando Joda-Time ?

Punto: la mayoría de los países usan el estándar internacional el lunes como primer día de la semana (!). Un grupo de otros usan el domingo (especialmente EE. UU.). Otros al parecer el sábado. Al parecer, el miércoles?

Wikipedia "semana de siete días" #número_de semana


Así es como uno podría trabajar alrededor del tiempo de Joda para llegar a los EE. UU. El primer día de la semana:

DateTime getFirstDayOfWeek(DateTime other) { if(other.dayOfWeek.get == 7) return other; else return other.minusWeeks(1).withDayOfWeek(7); }

O en Scala

def getFirstDayOfWeek(other: DateTime) = other.dayOfWeek.get match { case 7 => other case _ => other.minusWeeks(1).withDayOfWeek(7) }


Joda-Time usa el estándar ISO de lunes a domingo.

No tiene la capacidad de obtener el primer día de la semana, ni de devolver el índice del día de la semana basado en un día que no sea el lunes estándar. Finalmente, las semanas siempre se calculan con las reglas ISO.


No hay ninguna razón por la cual no pueda usar el JDK al menos para encontrar el "inicio habitual de la semana" para la configuración regional dada. La única parte difícil es traducir constantes para los días de la semana, donde ambos son del 1 al 7, pero java.util.Calendar se desplaza en uno, con Calendar.MONDAY = 2 vs. DateTimeConstants.MONDAY = 1.

De todos modos, use esta función:

/** * Gets the first day of the week, in the default locale. * * @return a value in the range of {@link DateTimeConstants#MONDAY} to * {@link DateTimeConstants#SUNDAY}. */ private static final int getFirstDayOfWeek() { return ((Calendar.getInstance().getFirstDayOfWeek() + 5) % 7) + 1; }

Agregue una configuración regional a Calendar.getInstance () para obtener un resultado para una configuración regional distinta de la predeterminada.


Parece que no tiene suerte, parece que todas las cronologías proporcionadas heredan la implementación de baseChronology, que solo admite definiciones ISO, es decir, lunes = 1 ... Domingo = 7.

Tendría que definir su propio LocaleChronology, posiblemente modelado en StrictChronology o LenientChronology, agregue un método de fábrica:

public static LocaleChronology getInstance(Chronology base, Locale locale)

y anular la implementación de

public final DateTimeField dayOfWeek()

con una reimplementación de java.util.Calendar.setWeekCountData (Locale desiredLocale) que se basa en sun.util.resources.LocaleData..getCalendarData (desiredLocale).


Utilicé el siguiente apéndice en Scala para obtener el primer y el último día de la semana de Joda DateTime

val today: DateTime = new DateTime() val dayOfWeek: DateTime.Property = today.dayOfWeek() val firstDayOfWeek: DateTime = dayOfWeek.withMinimumValue().minusDays(1) val lastDayOfWeek: DateTime = dayOfWeek.withMaximumValue().minusDays(1)

Nota : minusDays(1) solo está destinado a hacer que la semana abarque desde el domingo hasta el sábado (en lugar del valor predeterminado de lunes a domingo que Joda conoce). Para configuraciones regionales de EE. UU. (Y otras similares), puede ignorar esta parte