Question

Comment obtenez-vous le premier jour de la semaine avec un Paramètres régionaux utilisant Joda-Time ?

Remarque: la plupart des pays utilisent la norme internationale lundi comme premier jour de la semaine (!). Un groupe d'autres utilisent dimanche (notamment les États-Unis). D'autres apparemment samedi. Certains apparemment mercredi?!

Wikipedia " Semaine de sept jours & ###Week_number

Était-ce utile?

La solution

Joda-Time utilise la norme ISO du lundi au dimanche, semaine.

Il n’a pas la capacité d’obtenir le premier jour de la semaine, ni de renvoyer l’indice du jour de la semaine basé sur un jour autre que le lundi standard. Enfin, les semaines sont toujours calculées selon les règles ISO.

Autres conseils

Il n'y a aucune raison pour que vous ne puissiez pas utiliser le JDK au moins pour trouver le "début de semaine habituel". pour la locale donnée. La seule difficulté réside dans la traduction des constantes pour les jours de la semaine, où les deux sont comprises entre 1 et 7, mais java.util.Calendar est décalé d’une unité, avec Calendar.MONDAY = 2 vs. DateTimeConstants.MONDAY = 1.

Quoi qu'il en soit, utilisez cette fonction:

/**
 * 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;
}

Ajoutez un paramètre régional à Calendar.getInstance () pour obtenir un résultat pour un autre paramètre régional que celui par défaut.

Voici comment travailler avec Joda pour obtenir le premier jour de la semaine américain:

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

Ou en Scala

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

On dirait que vous n'avez pas de chance, il semble que toutes les chronologies fournies héritent de l'implémentation de baseChronology, qui ne prend en charge que les définitions ISO, c'est-à-dire lundi = 1 ... dimanche = 7.

Vous devez définir votre propre LocaleChronology, éventuellement sur le modèle de StrictChronology ou de LenientChronology, en ajoutant une méthode de fabrique:

public static LocaleChronology getInstance(Chronology base, Locale locale)

et remplacer la mise en œuvre de

public final DateTimeField dayOfWeek()

avec une nouvelle implémentation de java.util.Calendar.setWeekCountData (paramètre local souhaité), qui repose sur sun.util.resources.LocaleData..getCalendarData (désiréLocale).

Votre question est donc: comment obtenir le DayOfWeek à partir d’un objet Joda DateTime? Qu'en est-il de cela:

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

J'ai utilisé le talon suivant dans Scala pour obtenir les premier et dernier jours de la semaine auprès 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)

Remarque : les minusDays (1) ont pour seul but de faire de la semaine du dimanche au samedi (au lieu du lundi par défaut Dimanche connu de Joda ). Pour les environnements locaux américains (et similaires), vous pouvez ignorer cette partie

.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top