ТЛ; др
LocalDate.of( 2010 , Month.JULY , 1 )
.get (
IsoFields.WEEK_OF_WEEK_BASED_YEAR
)
26
Подробнее
Как уже отмечалось, ваш аргумент за месяц был неверным из-за сумасшедшего подсчета с нуля, сделанного в этом Calendar
классе.
Также отмечалось, что Calendar
определение класса "week" варьируется на Locale
вместо использования стандартного определения недели ISO 8601 , используемого в вашем коде Python.
java.time
Еще одна проблема: вы используете ужасно хлопотные старые классы даты и времени, связанные с самой ранней версией Java. Теперь они унаследованы, заменены классами java.time .
Для значения только для даты, без времени суток и без часового пояса, используйте LocalDate
. Используйте удобное перечисление Month
для удобства чтения.
LocalDate ld = LocalDate.of( 2010 , Month.JULY , 1 ) ;
Или используйте номер месяца, с нормальной цифрой 1-12 для января-декабря.
LocalDate ld = LocalDate.of( 2010 , 7 , 1 ) ;
Рассчитать стандарт ISO 8601 номер недели . Используйте метод LocalDate::get
для доступа к соответствующему значению. Передайте элемент enum IsoFields.WEEK_OF_WEEK_BASED_YEAR
, чтобы указать желаемое значение.
int w = ld.get( IsoFields.WEEK_OF_WEEK_BASED_YEAR ) ;
YearWeek
Совет: Если вы много работаете с этой неделей года, вам может пригодиться класс YearWeek
, который можно найти в ThreeTen-Extra проект.
YearWeek yw = YearWeek.from( ld ) ;
О java.time
Фреймворк java.time встроен в Java 8 и более поздние версии. Эти классы заменяют проблемные старые устаревшие классы даты и времени, такие как java.util.Date
, Calendar
, & SimpleDateFormat
.
Проект Joda-Time , теперь в режиме обслуживания , рекомендует выполнить переход на классы java.time .
Чтобы узнать больше, см. Oracle Tutorial . И поиск переполнения стека для многих примеров и объяснений. Спецификация JSR 310 .
Вы можете обмениваться java.time объектами напрямую с вашей базой данных. Используйте драйвер JDBC , совместимый с JDBC 4.2 или более поздней версии. Нет необходимости в строках, нет необходимости в java.sql.*
классах.
Где получить классы java.time?
Проект ThreeTen-Extra расширяет java.time дополнительными классами. Этот проект является полигоном для возможных будущих дополнений к java.time. Здесь вы можете найти некоторые полезные классы, такие как Interval
, YearWeek
, YearQuarter
и more .