Получить первый день определенной недели в Joda-Time? Джава
В Joda-Time есть способ получить дату первого дня недели (понедельник).
например, я хочу узнать, какая дата была понедельником этой недели на основе текущей текущей даты 21/01/11
Приветствия заранее.
редактировать: я также хочу найти дату конца недели, то есть дату воскресенья. ура
5 ответов
Попробуйте LocalDate.withDayOfWeek:
LocalDate now = new LocalDate();
System.out.println(now.withDayOfWeek(DateTimeConstants.MONDAY)); //prints 2011-01-17
System.out.println(now.withDayOfWeek(DateTimeConstants.SUNDAY)); //prints 2011-01-23
LocalDate today = new LocalDate();
LocalDate weekStart = today.dayOfWeek().withMinimumValue();
LocalDate weekEnd = today.dayOfWeek().withMaximumValue();
Даст вам первый и последний день, т.е. понедельник и воскресенье
Другой вариант - использовать roundFloorCopy. Это выглядит следующим образом:
LocalDate startOfWeek = new LocalDate().weekOfWeekyear().roundFloorCopy();
Для последнего дня стандартной недели (воскресенья) используйте roundCeilingCopy и minusDays…
LocalDate lastDateOfWeek = new LocalDate().weekOfWeekyear().roundCeilingCopy().minusDays( 1 );
Также работает для DateTime. И работает на конец недели (эксклюзив).
DateTime dateTime = new DateTime();
DateTime startOfWeek = dateTime.weekOfWeekyear().roundFloorCopy();
DateTime endOfWeek = dateTime.weekOfWeekyear().roundCeilingCopy();
Дамп на консоль…
System.out.println( "dateTime " + dateTime );
System.out.println( "startOfWeek " + startOfWeek );
System.out.println( "endOfWeek " + endOfWeek );
Когда беги…
dateTime 2014-01-24T00:00:34.955-08:00
startOfWeek 2014-01-20T00:00:00.000-08:00
endOfWeek 2014-01-27T00:00:00.000-08:00
Вы можете использовать метод getDayOfWeek(), который возвращает вам 1 для понедельника, 2 для вторника, .., 7 для воскресенья, чтобы вернуться на такое количество дней и достичь понедельника:
import org.joda.time.DateTime;
public class JodaTest {
public static void main(String[] args) {
DateTime date = new DateTime();
System.out.println(date);
//2011-01-21T15:06:18.713Z
System.out.println(date.minusDays(date.getDayOfWeek()-1));
//2011-01-17T15:06:18.713Z
}
}
См. Раздел "Запрос даты и времени" в руководстве пользователя Joda-Time.
Вот общий алгоритм, которому я бы следовал:
- найдите день недели целевой даты (21 января 2011, как вы упомянули)
- определить, сколько дней до понедельника это
- Вычтите значение #2 из целевой даты, используя
dateTime.minusDays(n)