Java вычисляет номер недели с первой неделей февраля как неделю № 1?

Я пытаюсь рассчитать номера недель, где начало номера недели должно начинаться с первой недели февраля. Например. 2-8 февраля 2015 года номер недели должен быть 1. Пожалуйста, помогите мне, так как я новичок в этой среде, и я могу рассчитать номера недель, начиная с первой недели января.

Чтобы добавить больше контекста, я пытаюсь реализовать календарь вещания в java с первой неделей, начинающейся с февраля.


person Siva Prasad    schedule 11.02.2015    source источник
comment
если бы вы могли попытаться быть немного более ясным, что вы ищете, это было бы полезно. Я не понимаю вашего примера. Так будет ли 9-15 неделей 2 и т. д. и т. д.? и почему вы говорите, что первая неделя должна начинаться с февраля, а затем переходить на январь? Что он?   -  person tlw11591    schedule 11.02.2015
comment
Да 9-15 должна быть вторая неделя. Я использую Calendar.WEEK_OF_YEAR, чтобы узнать текущий номер недели   -  person Siva Prasad    schedule 11.02.2015


Ответы (2)


Java.время

Класс LocalDate представляет значение без времени суток и без часового пояса.

Укажите желаемую дату в качестве даты привязки, даты, от которой мы отсчитываем недели. Вам нужны порядковые номера недель, поэтому добавьте единицу, чтобы избежать недели с нулевым номером.

ChronoUnit enum предлагает between метод расчета прошедшего времени.

LocalDate anchor = LocalDate.of( 2015 , Month.FEBRUARY , 2 );

LocalDate feb5 = LocalDate.of( 2015 , Month.FEBRUARY , 5 );
LocalDate feb8 = LocalDate.of( 2015 , Month.FEBRUARY , 8 );
LocalDate feb9 = LocalDate.of( 2015 , Month.FEBRUARY , 9 );

System.out.println( feb5 + " is in week # " + ( ChronoUnit.WEEKS.between( anchor , feb5 ) + 1 ) );
System.out.println( feb8 + " is in week # " + ( ChronoUnit.WEEKS.between( anchor , feb8 ) + 1 ) );
System.out.println( feb9 + " is in week # " + ( ChronoUnit.WEEKS.between( anchor , feb9 ) + 1 ) );

См. этот выполнение кода в реальном времени на IdeOne.com.

2015-02-05 находится на неделе № 1

2015-02-08 находится на неделе № 1

2015-02-09 на второй неделе


О java.time

Платформа java.time встроен в Java 8 и более поздние версии. Эти классы заменяют проблемные старые устаревшие классы даты и времени, такие как java.util.Date, Calendar и SimpleDateFormat.

Проект Joda-Time, теперь в режим обслуживания, советует перейти на java.time.

Чтобы узнать больше, см. учебник по Oracle. И поищите множество примеров и пояснений в Stack Overflow. Спецификация: JSR 310.

Где получить классы java.time?

Проект ThreeTen-Extra расширяет java.time дополнительными классами. . Этот проект является испытательным полигоном для возможных дополнений к java.time в будущем. Здесь вы можете найти несколько полезных классов, таких как Interval, YearWeek, YearQuarter и подробнее.

person Basil Bourque    schedule 07.12.2017

Так что просто используйте

Calendar c = Calendar.getInstance();
DateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
c.setTime( sdf.parse("2/2/2015"));
out.println( c.get( Calendar.WEEK_OF_YEAR ));

чтобы получить номер недели на 2 февраля и компенсировать его количеством недель между 1 января. Так

c.get( Calendar.WEEK_OF_YEAR )) - 4; 

или сколько недель впереди.

person tlw11591    schedule 11.02.2015