есть ли способ получить все недели года плюс дни начала и окончания каждой недели? (С Joda-Time)Joda Time - Получите все недели в году
что-то вроде этого (2012):
неделя: 21 старт: 21.05.2012 окончание: 27.05.12
Спасибо за вашу помощь
есть ли способ получить все недели года плюс дни начала и окончания каждой недели? (С Joda-Time)Joda Time - Получите все недели в году
что-то вроде этого (2012):
неделя: 21 старт: 21.05.2012 окончание: 27.05.12
Спасибо за вашу помощь
Попробуйте это:
SimpleDateFormat df = new SimpleDateFormat("dd.MM.yyyy");
Period weekPeriod = new Period().withWeeks(1);
DateTime startDate = new DateTime(2012, 1, 1, 0, 0, 0, 0);
DateTime endDate = new DateTime(2013, 1, 1, 0, 0, 0, 0);
Interval i = new Interval(startDate, weekPeriod);
while(i.getEnd().isBefore(endDate)) {
System.out.println("week : " + i.getStart().getWeekOfWeekyear()
+ " start: " + df.format(i.getStart().toDate())
+ " ending: " + df.format(i.getEnd().minusMillis(1).toDate()));
i = new Interval(i.getStart().plus(weekPeriod), weekPeriod);
}
Обратите внимание, что неделя номер начинается на 52, а затем перейти от 1 - 51, так как 1 Яна не в воскресенье.
Если вместо этого вы хотите, чтобы увидеть даты каждого понедельника по воскресенью недели:
SimpleDateFormat df = new SimpleDateFormat("dd.MM.yyyy");
Period weekPeriod = new Period().withWeeks(1);
DateTime startDate = new DateTime(2012, 1, 1, 0, 0, 0, 0);
while(startDate.getDayOfWeek() != DateTimeConstants.MONDAY) {
startDate = startDate.plusDays(1);
}
DateTime endDate = new DateTime(2013, 1, 1, 0, 0, 0, 0);
Interval i = new Interval(startDate, weekPeriod);
while(i.getStart().isBefore(endDate)) {
System.out.println("week : " + i.getStart().getWeekOfWeekyear()
+ " start: " + df.format(i.getStart().toDate())
+ " ending: " + df.format(i.getEnd().minusMillis(1).toDate()));
i = new Interval(i.getStart().plus(weekPeriod), weekPeriod);
}
Никогда не Joda Время. Я хотел бы сделать что-то вроде этого:
Так я бы сделал это со стандартным java-календарем api. Вероятно, время Джоды немного легче, я не знаю.
Я бы, вероятно, использовал таблицу базы данных, а не класс, но у вас есть правильная идея. –
FYI, проект Joda-Time теперь в maintenance mode, с командой консультирование по переходу на классы java.time. См. Tutorial by Oracle.
Вы можете определить в неделю по-разному.
Предполагаю, вы имеете в виду стандарт ISO 8601 week. Неделя № 1 имеет первый четверг года, начинается в понедельник, а недельный год - 52 или 53 недели. Несколько дней в конце или начале календарного года могут приземляться в другой недели.
Современный подход использует java.time классов, а также их расширение нашли в проекте ThreeTen-Extra.
От ThreeTen-Extra используйте класс YearWeek
.
YearWeek start = YearWeek.of(2017 , 1) ; // First week of the week-based year 2017.
Получите количество недель в этом году, 52 или 53 года.
int weeks = start.lengthOfYear() ;
... или ...
int weeks = (start.is53WeekYear()) ? 53 : 52 ;
Loop на каждую неделю года. Для каждого YearWeek
попросите его создать LocalDate
для начала и конца этой недели.
List<String> results = new ArrayList<>(weeks) ;
YearWeek yw = start ;
for(int i = 1 , i <] weeks , i ++) {
String message = "Week: " + yw + " | start: " + yw.atDay(DayOfWeek.MONDAY) + " | stop: " + yw.atDay(DayOfWeek.SUNDAY) ;
results.add(message) ;
// Prepare for next loop.
yw = yw.plusWeeks(1) ;
}
java.time каркас встроен в Java 8 и более поздних версий. Эти классы вытесняют неприятные старые legacy классы времени, такие как java.util.Date
, Calendar
, & SimpleDateFormat
.
Проект Joda-Time, в настоящее время в maintenance mode, советует перейти на классы java.time.
Чтобы узнать больше, см. Oracle Tutorial. И поиск Stack Overflow для многих примеров и объяснений. Спецификация: JSR 310.
Где получить классы java.time?
ThreeTen-Extra Проект расширяет java.time с дополнительными классами. Этот проект является доказательством возможных будущих дополнений к java.time. Здесь вы можете найти полезные классы, такие как Interval
, YearWeek
, YearQuarter
и more.
Ничего себе, спасибо большое! – user1412715