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))
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.
0 votes
Je pense que Joda Time devrait être utilisé avec les librairies Java Standard, comme Calendar. La page d'accueil dit "... Joda-Time est livré avec une interopérabilité JDK prête à l'emploi".
4 votes
Oui, cette déclaration signifie que vous pouvez facilement aller et venir entre eux. Cela ne signifie pas, AFAICT, que vous devriez mélange les. Pour moi, il semble que je puisse tout faire avec Joda Time, pur, sauf trouver le premier jour de la semaine !
1 votes
Calendar.getFirstDayOfWeek() renvoie un nombre différent de celui des DateTimeConstants de Joda. Par exemple, Calendar.SUNDAY==1 (valeur par défaut américaine), alors que DateTimeConstants.SUNDAY==7 (ISO).