Получить квартал из даты, даты начала и окончания квартала в Java

Год состоит из 4 кварталов(обычно обозначаемых как Q1, Q2, Q3 и Q4), а каждый квартал состоит из 3 месяцев. В этом руководстве по Java обсуждаются подходы к получению информации о текущем квартале, начальной и конечной дате текущего квартала. Мы также научимся получать начальную и конечную дату любого конкретного квартала.

1. Получить квартал на указанную дату

Новые API даты и времени Java 8 содержат класс java.time.temporal.IsoFields, имеющий поля(и единицы), которые следуют календарной системе на основе стандарта ISO-8601. Среди этих полей у нас есть поле для нашего варианта использования, то есть IsoFields.QUARTER_OF_YEAR.

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

LocalDate localDate = LocalDate.now(); // Given dateint currentQuarter = localDate.get(IsoFields.QUARTER_OF_YEAR); // returns 1, 2, 3 or 4

Если мы хотим получить номер квартала в отформатированном шаблоне(Q1, Q2 и т. д.) для отображения, мы можем использовать DateTimeFormatter и шаблон «QQQ».

String currentQuarterStr1 = localDate.format(DateTimeFormatter.ofPattern("QQQ"));String currentQuarterStr2 = localDate.format(DateTimeFormatter.ofPattern("QQQQ"));System.out.println(currentQuarterStr1);System.out.println(currentQuarterStr2);

Вывод программы:

Q11st quarter

Из выходных данных мы можем убедиться, что можем получить номер текущего квартала года.

2. Получите дату начала и окончания квартала

Подобно предыдущему примеру, мы можем использовать поле IsoFields.DAY_OF_QUARTER для доступа к первому дню и последней дате квартала. Давайте рассмотрим это на примере.

LocalDate firstDay = localDate.with(IsoFields.DAY_OF_QUARTER, 1L);LocalDate lastDay = firstDay.plusMonths(2).with(TemporalAdjusters.lastDayOfMonth());System.out.println(firstDay);System.out.println(lastDay); 

Вывод программы:

2024-01-012024-03-31

Таким образом мы можем найти дату начала и дату окончания текущего квартала.

3. Получите количество кварталов между двумя датами

Если у нас есть два значения LocalDate и мы хотим вычислить количество кварталов между этими датами, мы можем выполнить расчет с помощью IsoFields.QUARTER_YEARS, который представляет концепцию квартала года и может использоваться следующим образом:

long quarterCount = IsoFields.QUARTER_YEARS.between(startDate, endDate);

4. Заключение

В этом кратком руководстве по Java продемонстрировано использование новых API Java 8 для получения информации о текущем квартале, а также о дате начала и окончания текущего квартала.

Исходный код на Github

Прокрутить вверх