ТЛ; др
LocalDate.of( 2015 , 12 , 30 )
.get (
IsoFields.WEEK_OF_WEEK_BASED_YEAR
)
53
... или ...
org.threeten.extra.YearWeek.from (
LocalDate.of( 2015 , 12 , 30 )
)
2015-W53
java.time
Поддержка недели ISO 8601 теперь встроена в Java 8 и более поздние версии, в инфраструктуру java.time . Избегайте старых и печально известных классов java.util.Date/.Calendar, так как они были вытеснены java.time.
Эти новые классы java.time включают LocalDate
для значения только на дату без времени суток или часового пояса. Обратите внимание, что вы должны указать часовой пояс, чтобы определить «сегодня», поскольку дата не одинакова во всем мире.
ZoneId zoneId = ZoneId.of ( "America/Montreal" );
ZonedDateTime now = ZonedDateTime.now ( zoneId );
Или укажите год, месяц и день месяца, как указано в Вопросе.
LocalDate localDate = LocalDate.of( year , month , dayOfMonth );
Класс IsoFields
предоставляет информацию в соответствии со стандартом ISO 8601, включая неделю года для недельного года.
int calendarYear = now.getYear();
int weekNumber = now.get ( IsoFields.WEEK_OF_WEEK_BASED_YEAR );
int weekYear = now.get ( IsoFields.WEEK_BASED_YEAR );
В начале / конце года недельный год может отличаться от календарного года на ± 1. Например, обратите внимание на разницу между григорианскими календарями и календарями ISO 8601 на конец 2015 года: недели 52 и 1 становятся 52 и 53.
ThreeTen-Extra - YearWeek
Класс YearWeek
представляет номер года в формате ISO 8601 и номер недели вместе как один объект. Этот класс находится в проекте ThreeTen-Extra . Проект добавляет функциональность классам java.time, встроенным в Java.
ZoneId zoneId = ZoneId.of ( "America/Montreal" );
YearWeek yw = YearWeek.now( zoneId ) ;
Создать YearWeek
из даты.
YearWeek yw = YearWeek.from (
LocalDate.of( 2015 , 12 , 30 )
)
Этот класс может генерировать и анализировать строки в стандартном формате ISO 8601.
String output = yw.toString() ;
2015-W53
YearWeek yw = YearWeek.parse( "2015-W53" ) ;
Вы можете извлечь номер недели или номер года в неделю.
int weekNumber = yw.getWeek() ;
int weekBasedYearNumber = yw.getYear() ;
Вы можете сгенерировать определенную дату (LocalDate
), указав желаемый день недели, который будет найден в течение этой недели. Чтобы указать день недели, используйте перечисление DayOfWeek
, встроенное в Java 8 и более поздние версии.
LocalDate ld = yw.atDay( DayOfWeek.WEDNESDAY ) ;
О java.time
Фреймворк java.time встроен в Java 8 и более поздние версии. Эти классы заменяют проблемные старые устаревшие классы даты и времени, такие как java.util.Date
, Calendar
, & SimpleDateFormat
.
Чтобы узнать больше, см. Oracle Tutorial . И поиск переполнения стека для многих примеров и объяснений. Спецификация JSR 310 .
Проект Joda-Time , теперь в режиме обслуживания , рекомендует выполнить переход на классы java.time .
Вы можете обмениваться java.time объектами напрямую с вашей базой данных. Используйте драйвер JDBC , совместимый с JDBC 4.2 или более поздней версией. Нет необходимости в строках, нет необходимости в java.sql.*
классах.
Где получить классы java.time?
ThreeTen-Extra Проект расширяет java.time дополнительными классами. Этот проект является полигоном для возможных будущих дополнений к java.time. Здесь вы можете найти некоторые полезные классы, такие как Interval
, YearWeek
, YearQuarter
и more .