Класс WeekFields
- Все реализованные интерфейсы:
Serializable
public final class WeekFields extends Object implements Serializable
Стандартная неделя состоит из семи дней, однако в разных культурах существуют разные определения некоторых других аспектов недели. Этот класс представляет определение недели для предоставления экземпляров TemporalField.
WeekFields предоставляет пять полей: dayOfWeek(), weekOfMonth(), weekOfYear(), weekOfWeekBasedYear() и weekBasedYear(), которые обеспечивают доступ к значениям любого временного объекта.
Вычисления дня недели, недели месяца и недели года основаны на пролептическом годе, месяце года, дне месяца и дне недели по ISO, которые, в свою очередь, основаны на дне эпохи и хронологии. В зависимости от хронологии значения могут не совпадать с годом эры.
Неделя определяется следующими параметрами:
- Первый день недели. Например, стандарт ISO-8601 считает первым днем недели понедельник.
- Минимальное количество дней в первой неделе. Например, согласно стандарту ISO-8601, в первой неделе должно быть не менее 4 дней.
Неделя месяца
Используется одно поле: неделя месяца. Вычисление гарантирует, что недели не пересекают границы месяца. Месяц делится на периоды, каждый из которых начинается в заданный первый день недели. Самый ранний период называется неделей 0, если в нем меньше минимального количества дней, и неделей 1, если в нем не меньше минимального количества дней.| Дата | День недели | Первый день: понедельник Минимальное количество дней: 4 |
Первый день: понедельник Минимальное количество дней: 5 |
|---|---|---|---|
| 2008-12-31 | Среда | Неделя 5 декабря 2008 года | Неделя 5 декабря 2008 года |
| 2009-01-01 | Четверг | Неделя 1 января 2009 года | Неделя 0 января 2009 года |
| 2009-01-04 | Воскресенье | Неделя 1 января 2009 года | Неделя 0 января 2009 года |
| 2009-01-05 | Понедельник | Неделя 2 января 2009 года | Неделя 1 января 2009 года |
Неделя года
Используется одно поле: неделя года. Вычисление гарантирует, что недели не пересекают границы года. Год делится на периоды, каждый из которых начинается в заданный первый день недели. Самый ранний период называется неделей 0, если в нем меньше минимального количества дней, и неделей 1, если в нем не меньше минимального количества дней.Год на основе недель
Для года на основе недель используются два поля: одно дляweek-of-week-based-year, другое для week-based-year. В году на основе недель каждая неделя относится только к одному году. Неделя 1 года — это первая неделя, которая начинается в первый день недели и содержит не менее минимального количества дней. Первая и последняя недели года могут включать дни предыдущего или следующего календарного года соответственно. | Дата | День недели | Первый день: понедельник Минимальное количество дней: 4 |
Первый день: понедельник Минимальное количество дней: 5 |
|---|---|---|---|
| 2008-12-31 | Среда | Неделя 1 2009 года | Неделя 53 2008 года |
| 2009-01-01 | Четверг | Неделя 1 2009 года | Неделя 53 2008 года |
| 2009-01-04 | Воскресенье | Неделя 1 2009 года | Неделя 53 2008 года |
| 2009-01-05 | Понедельник | Неделя 2 2009 года | Неделя 1 2009 года |
- Требования к реализации:
- Этот класс неизменяемый и потокобезопасный.
- Начиная с:
- 1.8
- См. также:
Краткое описание полей
| Модификатор и тип | Поле | Описание |
|---|---|---|
static final WeekFields |
ISO |
Определение ISO-8601, согласно которому неделя начинается в понедельник, а в первой неделе должно быть не менее 4 дней. |
static final WeekFields |
SUNDAY_START |
Распространенное определение недели, согласно которому неделя начинается в воскресенье, а в первой неделе должен быть как минимум 1 день. |
static final TemporalUnit |
WEEK_BASED_YEARS |
Единица измерения, представляющая годы на основе недель для выполнения сложения и вычитания. |
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
TemporalField |
dayOfWeek() |
Возвращает поле для доступа к дню недели на основе этого WeekFields. |
boolean |
equals |
Проверяет, равен ли этот WeekFields указанному объекту. |
DayOfWeek |
getFirstDayOfWeek() |
Возвращает первый день недели. |
int |
getMinimalDaysInFirstWeek() |
Возвращает минимальное количество дней в первой неделе. |
int |
hashCode() |
Хеш-код этого WeekFields. |
static WeekFields |
of |
Создает экземпляр WeekFields на основе первого дня недели и минимального количества дней. |
static WeekFields |
of |
Создает экземпляр WeekFields, соответствующий локали. |
String |
toString() |
Строковое представление этого экземпляра WeekFields. |
TemporalField |
weekBasedYear() |
Возвращает поле для доступа к году года на основе недель на основе этого WeekFields. |
TemporalField |
weekOfMonth() |
Возвращает поле для доступа к неделе месяца на основе этого WeekFields. |
TemporalField |
weekOfWeekBasedYear() |
Возвращает поле для доступа к неделе года на основе недель на основе этого WeekFields. |
TemporalField |
weekOfYear() |
Возвращает поле для доступа к неделе года на основе этого WeekFields. |
Подробное описание полей
ISO
public static final WeekFields ISO
Стандарт ISO-8601 определяет календарную систему, основанную на неделях. Для разделения потока дней вместо стандартных понятий года, месяца и дня используются понятия года на основе недель и недели года на основе недель.
Обратите внимание, что первая неделя может начинаться в предыдущем календарном году. Также обратите внимание, что первые несколько дней календарного года могут относиться к году на основе недель, соответствующему предыдущему календарному году.
SUNDAY_START
public static final WeekFields SUNDAY_START
Определяется как неделя, начинающаяся в воскресенье и содержащая в месяце как минимум 1 день. Это определение недели используется в США и других европейских странах.
WEEK_BASED_YEARS
public static final TemporalUnit WEEK_BASED_YEARS
Эта единица позволяет прибавлять к дате или вычитать из нее количество лет на основе недель. Она равна 52 или 53 неделям. Приблизительная продолжительность года на основе недель совпадает с продолжительностью стандартного года ISO в 365.2425 Days.
Правила сложения прибавляют количество лет на основе недель к существующему значению поля года на основе недель, сохраняя номер недели и день недели, если номер недели не превышает допустимое значение для целевого года. В противном случае устанавливается последняя неделя года с тем же днем недели.
Эта единица является неизменяемым и потокобезопасным синглтоном.
Подробное описание методов
of
public static WeekFields of(Locale locale)
WeekFields, соответствующий локали. Будут найдены соответствующие значения, предоставляемые поставщиком данных локализации. Если локаль содержит расширения Unicode «fw» (первый день недели) и/или «rg» (переопределение региона), возвращаемый экземпляр будет отражать значения, заданные этими расширениями. Если заданы и «fw», и «rg», значение из расширения «fw» имеет приоритет над неявным значением из расширения «rg».
Например, пользователи, которым нужна английская локаль, но при этом первый день недели должен соответствовать стандарту ISO-8601, могут вызвать
Locale enIsoLoc = Locale.forLanguageTag("en-u-fw-mon");
WeekFields.of(enIsoLoc).getFirstDayOfWeek(); // returns MONDAY
- Параметры:
-
locale— используемая локаль, не null - Возвращает:
- определение недели, не null
of
public static WeekFields of(DayOfWeek firstDayOfWeek, int minimalDaysInFirstWeek)
WeekFields на основе первого дня недели и минимального количества дней. Первый день недели определяет день недели ISO DayOfWeek, который считается днем 1 недели. Минимальное количество дней в первой неделе задает, сколько дней должно приходиться на месяц или год, начиная с первого дня недели, чтобы неделя считалась первой. Значение 1 означает, что первый день месяца или года будет считаться частью первой недели, а значение 7 требует, чтобы все семь дней приходились на новый месяц или год.
Экземпляры WeekFields являются синглтонами: для каждой уникальной комбинации firstDayOfWeek и minimalDaysInFirstWeek будет возвращаться один и тот же экземпляр.
- Параметры:
-
firstDayOfWeek— первый день недели, не null -
minimalDaysInFirstWeek— минимальное количество дней в первой неделе, от 1 до 7 - Возвращает:
- определение недели, не null
- Выбрасывает:
-
IllegalArgumentException— если минимальное количество дней меньше единицы или больше 7
getFirstDayOfWeek
public DayOfWeek getFirstDayOfWeek()
Первый день недели зависит от культуры. Например, в США это воскресенье, а во Франции и согласно стандарту ISO-8601 — понедельник. Этот метод возвращает первый день в виде стандартного перечисления DayOfWeek.
- Возвращает:
- первый день недели, не null
getMinimalDaysInFirstWeek
public int getMinimalDaysInFirstWeek()
Количество дней, необходимое для определения первой недели месяца или года, зависит от культуры. Например, согласно ISO-8601, перед тем как считать неделю первой, в ней должно быть 4 дня (больше половины недели).
- Возвращает:
- минимальное количество дней в первой неделе месяца или года, от 1 до 7
dayOfWeek
public TemporalField dayOfWeek()
WeekFields. Это поле аналогично ChronoField.DAY_OF_WEEK, но использует значения дня недели, определяемые этим WeekFields. Дни нумеруются от 1 до 7, причем значению 1 соответствует first day-of-week.
Например, если первым днем недели является воскресенье, ему будет присвоено значение 1, а остальные дни будут иметь значения от 2 для понедельника до 7 для субботы.
На этапе разрешения при разборе локализованный день недели преобразуется в стандартный день недели ChronoField. День недели должен находиться в допустимом диапазоне от 1 до 7. Другие поля этого класса создают даты, используя стандартный день недели.
- Возвращает:
- поле, обеспечивающее доступ к дню недели с локализованной нумерацией, не null
weekOfMonth
public TemporalField weekOfMonth()
WeekFields. Это понятие количества недель в месяце, где недели начинаются в фиксированный день, например в понедельник. Обычно это поле используется вместе с dayOfWeek().
Неделя 1 — это неделя, начинающаяся в getFirstDayOfWeek(), в которой на этот месяц приходится не менее getMinimalDaysInFirstWeek() дней. Таким образом, неделя 1 может начинаться не более чем за minDays дней до начала месяца. Если первая неделя начинается после начала месяца, предшествующий период относится к неделе 0.
Например:
- если 1-е число месяца приходится на понедельник, неделя 1 начинается 1-го числа, и недели 0 нет
- если 2-е число месяца приходится на понедельник, неделя 1 начинается 2-го числа, а 1-е относится к неделе 0
- если 4-е число месяца приходится на понедельник, неделя 1 начинается 4-го числа, а даты с 1-го по 3-е относятся к неделе 0
- если 5-е число месяца приходится на понедельник, неделя 2 начинается 5-го числа, а даты с 1-го по 4-е относятся к неделе 1
Это поле можно использовать с любой календарной системой.
На этапе разрешения при разборе дату можно создать на основе года, недели месяца, месяца года и дня недели.
В строгом режиме все четыре поля проверяются на соответствие диапазонам допустимых значений. Поле недели месяца проверяется, чтобы убедиться, что полученный месяц совпадает с заданным.
В интеллектуальном режиме все четыре поля проверяются на соответствие диапазонам допустимых значений. Для поля недели месяца проверяется диапазон от 0 до 6, поэтому полученная дата может относиться к месяцу, отличному от указанного.
В нестрогом режиме год и день недели проверяются на соответствие диапазонам допустимых значений. Полученная дата вычисляется так же, как при следующем четырехэтапном подходе. Сначала создается дата, соответствующая первому дню первой недели января заданного года. Затем из месяца года вычитается единица, и к дате прибавляется полученное количество месяцев. Затем из недели месяца вычитается единица, и к дате прибавляется полученное количество недель. Наконец, дата корректируется до нужного дня недели в локализованной неделе.
- Возвращает:
- поле, обеспечивающее доступ к неделе месяца, не null
weekOfYear
public TemporalField weekOfYear()
WeekFields. Это понятие количества недель в году, где недели начинаются в фиксированный день, например в понедельник. Обычно это поле используется вместе с dayOfWeek().
Неделя 1 — это неделя, начинающаяся в getFirstDayOfWeek(), в которой на этот год приходится не менее getMinimalDaysInFirstWeek() дней. Таким образом, неделя 1 может начинаться не более чем за minDays дней до начала года. Если первая неделя начинается после начала года, предшествующий период относится к неделе 0.
Например:
- если 1-й день года приходится на понедельник, неделя 1 начинается 1-го числа, и недели 0 нет
- если 2-й день года приходится на понедельник, неделя 1 начинается 2-го числа, а 1-е относится к неделе 0
- если 4-й день года приходится на понедельник, неделя 1 начинается 4-го числа, а дни с 1-го по 3-й относятся к неделе 0
- если 5-й день года приходится на понедельник, неделя 2 начинается 5-го числа, а дни с 1-го по 4-й относятся к неделе 1
Это поле можно использовать с любой календарной системой.
На этапе разрешения при разборе дату можно создать на основе года, недели года и дня недели.
В строгом режиме все три поля проверяются на соответствие диапазонам допустимых значений. Поле недели года проверяется, чтобы убедиться, что полученный год совпадает с заданным.
В интеллектуальном режиме все три поля проверяются на соответствие диапазонам допустимых значений. Для поля недели года проверяется диапазон от 0 до 54, поэтому полученная дата может относиться к году, отличному от указанного.
В нестрогом режиме год и день недели проверяются на соответствие диапазонам допустимых значений. Полученная дата вычисляется так же, как при следующем трехэтапном подходе. Сначала создается дата, соответствующая первому дню первой недели заданного года. Затем из недели года вычитается единица, и к дате прибавляется полученное количество недель. Наконец, дата корректируется до нужного дня недели в локализованной неделе.
- Возвращает:
- поле, обеспечивающее доступ к неделе года, не null
weekOfWeekBasedYear
public TemporalField weekOfWeekBasedYear()
WeekFields. Это понятие количества недель в году, где недели начинаются в фиксированный день, например в понедельник, и каждая неделя принадлежит ровно одному году. Обычно это поле используется вместе с dayOfWeek() и weekBasedYear().
Неделя 1 — это неделя, начинающаяся в getFirstDayOfWeek(), в которой на этот год приходится не менее getMinimalDaysInFirstWeek() дней. Если первая неделя начинается после начала года, предшествующий период относится к последней неделе предыдущего года.
Например:
- если 1-й день года приходится на понедельник, неделя 1 начинается 1-го числа
- если 2-й день года приходится на понедельник, неделя 1 начинается 2-го числа, а 1-е относится к последней неделе предыдущего года
- если 4-й день года приходится на понедельник, неделя 1 начинается 4-го числа, а дни с 1-го по 3-й относятся к последней неделе предыдущего года
- если 5-й день года приходится на понедельник, неделя 2 начинается 5-го числа, а дни с 1-го по 4-й относятся к неделе 1
Это поле можно использовать с любой календарной системой.
На этапе разрешения при разборе дату можно создать на основе года на основе недель, недели года и дня недели.
В строгом режиме все три поля проверяются на соответствие диапазонам допустимых значений. Поле недели года проверяется, чтобы убедиться, что полученный год на основе недель совпадает с заданным.
В интеллектуальном режиме все три поля проверяются на соответствие диапазонам допустимых значений. Для поля недели года на основе недель проверяется диапазон от 1 до 53, поэтому полученная дата может относиться к следующему году на основе недель, а не к указанному.
В нестрогом режиме год и день недели проверяются на соответствие диапазонам допустимых значений. Полученная дата вычисляется так же, как при следующем трехэтапном подходе. Сначала создается дата, соответствующая первому дню первой недели заданного года на основе недель. Затем из недели года на основе недель вычитается единица, и к дате прибавляется полученное количество недель. Наконец, дата корректируется до нужного дня недели в локализованной неделе.
- Возвращает:
- поле, обеспечивающее доступ к неделе года на основе недель, не null
weekBasedYear
public TemporalField weekBasedYear()
WeekFields. Это понятие года, в котором недели начинаются в фиксированный день, например в понедельник, и каждая неделя принадлежит ровно одному году. Обычно это поле используется вместе с dayOfWeek() и weekOfWeekBasedYear().
Неделя 1 — это неделя, начинающаяся в getFirstDayOfWeek(), в которой на этот год приходится не менее getMinimalDaysInFirstWeek() дней. Таким образом, неделя 1 может начинаться до начала года. Если первая неделя начинается после начала года, предшествующий период относится к последней неделе предыдущего года.
Это поле можно использовать с любой календарной системой.
На этапе разрешения при разборе дату можно создать на основе года на основе недель, недели года и дня недели.
В строгом режиме все три поля проверяются на соответствие диапазонам допустимых значений. Поле недели года проверяется, чтобы убедиться, что полученный год на основе недель совпадает с заданным.
В интеллектуальном режиме все три поля проверяются на соответствие диапазонам допустимых значений. Для поля недели года на основе недель проверяется диапазон от 1 до 53, поэтому полученная дата может относиться к следующему году на основе недель, а не к указанному.
В нестрогом режиме год и день недели проверяются на соответствие диапазонам допустимых значений. Полученная дата вычисляется так же, как при следующем трехэтапном подходе. Сначала создается дата, соответствующая первому дню первой недели заданного года на основе недель. Затем из недели года на основе недель вычитается единица, и к дате прибавляется полученное количество недель. Наконец, дата корректируется до нужного дня недели в локализованной неделе.
- Возвращает:
- поле, обеспечивающее доступ к году на основе недель, не null
equals
public boolean equals(Object object)
WeekFields указанному объекту. Сравнение выполняется по полному состоянию правил, то есть по первому дню недели и минимальному количеству дней.
hashCode
toString
© 1993, 2025, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.
https://docs.oracle.com/en/java/javase/25/docs/api/java.base/java/time/temporal/WeekFields.html