Joda Time-получить все недели в году
есть ли способ получить все недели года плюс начало и окончание дней каждой недели ? (С Joda-Time)
что-то вроде этого (2012) :
неделю : 21 начало: 21.05.2012 окончание : 27.05.12
Спасибо за помощь
3 ответов
попробуйте это:
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. Я бы сделал что-то вроде этого:
- создайте класс с номером недели и двумя датами (начало, конец)
- Создайте список этого класса
- повторите год (Неделя в неделю) и сохраните текущую неделю в списке
именно так я бы сделал это со стандартным api календаря java. Возможно, время Джоды немного легче, я не знаю.
Joda-Time находится в режиме обслуживания
к твоему сведению,Joda Времени сейчас режим обслуживания, С командой, консультирующей миграцию в java.время классы. См.учебник по Oracle.
определить ‘неделя’
вы можете определить неделю по-разному.
Я предполагаю, что вы имеете в виду стандартный ISO 8601 неделя. Неделя номер 1 - первый четверг год, начинается в понедельник, а недельный год имеет 52 или 53 недели. Несколько дней в конце или начале календарного года может приземлиться в другой неделе на основе года.
java.время
современный подход использует java.время классы и их расширение, найденное в 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 ;
цикл для каждой недели года. Для каждого 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.время
на java.время framework встроен в Java 8 и более поздние версии. Эти классы вытесняют беспокойных старых наследие классы даты и времени, такие как java.util.Date
, Calendar
, & SimpleDateFormat
.
на Joda Времени, теперь режим обслуживания, советует миграцию в java.время классы.
чтобы узнать больше, см. В Oracle Учебник. И search Stack Overflow для многих примеров и объяснений. Спецификация JSR 310.
где получить Ява.время занятий?
-
Java SE 8, Java SE 9, и позже
- встроенный.
- часть стандартного API Java со встроенной реализацией.
- Java 9 добавляет некоторые незначительные функции и исправления.
-
Java SE 6 и Java SE 7
- большая часть Ява.функциональность времени обратно портирована на Java 6 & 7 в ThreeTen-Backport.
-
Android
- на ThreeTenABP проект приспосабливается ThreeTen-Backport (упомянутые выше) для Android специально.
- посмотреть как использовать ThreeTenABP....
на ThreeTen-Extra проект расширяет java.время с дополнительными занятиями. Этот проект является испытательной площадкой для возможных будущих дополнений к java.время. Здесь вы можете найти полезные классы, такие как Interval
, YearWeek
, YearQuarter
и больше.