57 votes

Début de la semaine pour une locale utilisant Joda-Time

Comment déterminer quel jour de la semaine est considéré comme le "début" selon une donnée Locale en utilisant Joda-Time ?

Point : La plupart des pays utilisent la norme internationale du lundi comme premier jour de la semaine ( !). Quelques autres utilisent le dimanche (notamment les États-Unis). D'autres apparemment le samedi. Certains apparemment le mercredi ( !).

Wikipedia "Semaine de sept jours "#Numéro de la semaine

1 votes

Relisez ma question, s'il vous plaît. Je crois que j'ai suffisamment insisté sur ce point pour qu'il soit impossible de le confondre avec la question que vous avez formulée tous les deux. Étonnamment, je me suis trompé. Je recommence : Certaines régions (par exemple les États-Unis) utilisent le dimanche comme premier jour de la semaine. D'autres utilisent le lundi, standard ISO, comme premier jour de la semaine. Comment puis-je interroger Joda Time à ce sujet ? Avec Java, c'est très facile : [java.sun.com/javase/6/docs/api/java/util/](http://java.sun.com/javase/6/docs/api/java/util/Calendar.html#getFirstDayOfWeek()) Donc : Calendar.getInstance(Locale.US).getFirstDayOfWeek(). Avec Joda ?

2 votes

Pourquoi ne pas simplement utiliser Calendar.getInstance(Locale.US).getFirstDayOfWeek() ?

3 votes

Parce que si je veux utiliser Joda Time, je veux l'utiliser "de bout en bout", et non pas mélanger deux bibliothèques complètement différentes.

0voto

Puneeth Reddy V Points 874

Voici le code Scala pour obtenir le jour de début et de fin de semaine de façon dynamique.

Note:- Assurez-vous que le début et la fin sont dans l'ordre, par exemple lorsque le jour de début est Sunday puis Monday est le jour de fin de la semaine

def shiftWeeksBy(startDayOfWeek: Int, currentWeekDay: Int) : Int = (startDayOfWeek, currentWeekDay) match {
  case (s, c) if s <= c  | s == 1 => 0 //start day of week is Monday -OR- start day of week <= current week day
  case _ => 1
}

def getStartAndEndDays(initialTime: DateTime, startDayOfWeek: Int, endDayOfWeek: Int): (Option[DateTime], Option[DateTime]) = {
   val currentDateWeekDay = initialTime.dayOfWeek.get
   (Some(initialTime.minusWeeks(shiftWeeksBy(startDayOfWeek, currentDateWeekDay)).withDayOfWeek(startDayOfWeek).withTimeAtStartOfDay()),
       Some(initialTime.plusWeeks(shiftWeeksBy(currentDateWeekDay, endDayOfWeek)).withDayOfWeek(endDayOfWeek)))
}

Sortie : - Pour 5th Jan 2021 le premier jour de la semaine est Thursday et le dernier jour de la semaine est Wednesday puis la semaine commence avec 2020-12-31 et se terminent par 2021-01-06 .

scala> getStartAndEndDays(new DateTime("2021-01-05T00:00:00.000"), 4, 3)
res5: (Option[org.joda.time.DateTime], Option[org.joda.time.DateTime]) = (Some(2020-12-31T00:00:00.000+05:30),Some(2021-01-06T00:00:00.000+05:30))

-1voto

Tim Büthe Points 21527

Votre question est donc la suivante : comment obtenir le jour de la semaine à partir d'un objet Joda DateTime ? Qu'en est-il de ceci :

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

1 votes

Non, ce n'est pas ma question. Ma question est la suivante : étant donné Locale.US (et RIEN D'AUTRE), quel est le premier jour de la semaine ? Et je veux que Joda Time me le dise - pas les bibliothèques java std. Les chronologies de Joda Time semblent toutes indiquer que le lundi est le premier jour de la semaine (ce que dit la norme ISO8601). N'est-ce pas possible ? Joda Time ne sait-il pas que les Américains préfèrent voir leurs calendriers avec le "dimanche" comme premier jour de la semaine, alors que (la plupart) des Européens s'en offusquent et veulent que le "lundi" soit le début de la semaine ? Je trouve cela incroyable, car le Joda Time semble complet.

0 votes

Pourquoi n'utilisez-vous pas simplement les bibliothèques standard de Java ? Peut-être qu'ils ne l'ont pas implémenté, parce que c'est déjà là. Je ne comprends vraiment pas votre point de vue.

2 votes

Connaissez-vous Joda Time ? Ils n'auraient pas eu besoin d'implémenter quoi que ce soit, puisque tout est possible dans les librairies standard de java. Ma question est donc toujours d'actualité : Si ce n'est vraiment pas possible avec Joda Time, alors Joda Time est incomplet, manquant. Je trouve cela difficile à croire, mais cela pourrait être vrai.

-1voto

y2k-shubham Points 1489

J'ai utilisé les éléments suivants talon sur Scala pour obtenir le premier et le dernier jour de la semaine à partir 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)

Note : Le site minusDays(1) n'a pour but que de rendre le semaine du dimanche au samedi (au lieu du lundi au dimanche connu par défaut). Joda ). Pour les États-Unis (et autres pays similaires) locales vous pouvez ignorer cette partie

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