Т.Л., д-р
YearWeek.of(LocalDate.parse("2017-01-23"))
.getWeek() // and .getYear()
ISO 8601 стандарт недели
Если вы хотите стандартный ISO 8601 week, а не локализованное определение недели, используйте YearWeek
класс, найденный в проекте ThreeTen-Extra, который добавляет функциональность к классам java.time, встроенным в Java 8 и более поздние версии.
ISO-8601 определяет неделю, как всегда, начиная с понедельника. Первая неделя - это неделя, которая содержит первый четверг календарного года. Таким образом, недельный год, используемый в этом классе, не совпадает с календарным годом.
Во-первых, получите сегодняшнюю дату. Класс LocalDate
представляет собой значение даты только без времени и без часового пояса.
Часовой пояс имеет решающее значение для определения даты. В любой данный момент дата изменяется по всему миру по зонам. Например, через несколько минут после полуночи в Paris France - это новый день, пока еще «вчера» в Montréal Québec.
Указать proper time zone name в формате continent/region
, такие как America/Montreal
, Africa/Casablanca
или Pacific/Auckland
. Никогда не используйте аббревиатуру 3-4 буквы, такую как EST
или IST
, так как они не настоящие часовые пояса, не стандартизированные, и даже не уникальные (!).
ZoneId z = ZoneId.of("America/Montreal");
LocalDate today = LocalDate.now(z);
Или позвольте пользователю указать дату, введя строку. Разбор строки ввода даты охватывает в много другие вопросы и ответы. Проще всего использовать пользовательский стандарт ISO 8601, YYYY-MM-DD, такой как 2017-01-23
.
LocalDate ld = LocalDate.parse("2017-01-23") ;
Для других форматов, указать DateTimeFormatter
для синтаксического анализа. Поиск переполнения стека для многих примеров использования этого класса.
DateTimeFormatter f = DateTimeFormatter.ofPattern("d/M/uuuu" , Locale.US) ;
LocalDate ld = LocalDate.parse("1/23/2017" , f) ;
Получить YearWeek
.
YearWeek yw = YearWeek.of(ld) ;
Чтобы создать строку, рассмотреть вопрос об использовании standard ISO 8601 format for year-week, YYYY-Www, такие как 2017-W45
. Или вы можете извлечь каждый номер.
YearWeek::getWeek
- Получает поле недели недели недели.
YearWeek::getYear
- Получает поле недели за год.
О java.time
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.
Вы должны разобрать вход с указанным форматом. Это может помочь: http://stackoverflow.com/questions/3386520/parse-date-from-string-in-this-format-dd-mm-yyyy-to-dd-mm-yyyy –
FYI, сложная старая дата -time-классы, такие как ['java.util.Date'] (https://docs.oracle.com/javase/8/docs/api/java/util/Date.html), [' java.util.Calendar' ] (https://docs.oracle.com/javase/8/docs/api/java/util/Calendar.html) и 'java.text.SimpleTextFormat' теперь [legacy] (https: //en.wikipedia .org/wiki/Legacy_system), вытесняется классами [java.time] (https://docs.oracle.com/javase/8/docs/api/java/time/package-summary.html). См. [Учебное пособие по Oracle] (https://docs.oracle.com/javase/tutorial/datetime/TOC.html). –