Мне нужно найти момент, который находится в середине месяца. Вместо того, чтобы заниматься целыми месяцами, мне нужна середина месяца и середина следующего месяца. FYI, прецедент предназначен для рисования диаграмм, затенения каждой стороны начала каждого месяца по временной шкале; но это не имеет значения.Найдите середину месяца
Целых дней было бы достаточно хорошее разрешение. Очевидно, что месяцы не все имеют четное количество дней, но допустимое правило, например «первые 15 дней», будет приемлемым. Однако мне нужно будет указать значения даты-времени, такие как DateTime
в Joda-Time.
В настоящее время я использую ± 15 дней в качестве произвольной строки для середины месяца. Что-то вроде следующего.
DateTime target = DateTime.now(DateTimeZone.forID("Africa/Casablanca")) ;
DateTime monthStart = target.withDayOfMonth(1).withTimeAtStartOfDay() ;
DateTime halfMonthPast = monthStart.minusDays(15) ;
DateTime halfMonthCurrent = monthStart.plusDays(15) ;
Interval halfAndHalf = new Interval(halfMonthPast , halfMonthCurrent) ;
Но произвольно использование 15 дней вызывает перекрытия или пробелы в месяцах без 30 дней. Я предпочел бы рассчитать точную среднюю точку, поэтому серия этих интервалов будет аккумулировать друг друга аккуратно без зазоров или перекрытий. В идеале будет использоваться подход Half-Open, поэтому начало будет включено, а окончание - исключительно.
[mid-April to mid-May][mid-May to mid-June][mid-June to mid-July]
Используя либо Joda-Time или java.time будет предпочтительным маршрутом.
У вас есть код, показывающий вам первоначальные попытки? –
Можете ли вы поделиться некоторым кодом, который может продемонстрировать, чего именно вы пытаетесь достичь? –
Пожалуйста, определите, что именно вы ожидаете. Если вы сообщите нам, что ожидаемый ответ будет за 30-дневный месяц и 31-дневный месяц, это должно быть достаточно хорошим (мы можем выяснить февраль). – ajb