Java: функция addToDay

#java #function #date

#java #функция #Дата

Вопрос:

Я пытаюсь настроить свою функцию addToDay. В настоящее время я застрял на том, как продолжить это или даже написать это правильно. Сама функция будет принимать переменную в диапазоне от -100 до 100. Таким образом, вы бы в основном добавили эту переменную к текущей, и если она была ниже 0, то вычтите месяц или, если она была выше максимального числа месяцев, затем добавьте месяц. У меня есть настройка этой функции, поэтому все, что мне нужно сделать, это вызвать addToMonth с правильной суммой. Моя проблема заключается в количестве дней в каждом месяце. Например, в октябре 31 день, а в ноябре 30. У меня есть функция, которая возвращает количество дней в текущем заданном месяце, поэтому я могу вызвать ее, чтобы узнать, сколько максимальных дней должно быть в текущем месяце. Я думаю, может быть, цикл while сработает, но я просто хотел узнать чьи-либо мысли о наилучшем способе его настройки.

У меня есть 3 частных целых числа: месяц, день, год. Это то, что необходимо изменить. У меня уже есть обе функции addTo для настройки месяца и года.

Вот некоторые другие функции, которые я создал, которые можно использовать в этом:
1. addToMonth(int delta) — изменяет текущий месяц в зависимости от заданного параметра
2. getDaysInMonth() — возвращает дни в месяце в зависимости от самого месяца
3. validateDay() — возвращает true илиfalse, если дни выходят за рамки требуемых требований.

Я не хочу использовать утилиту календаря

Я также не хочу использовать какие-либо другие утилиты. Просто базовый код с Junit для тестирования

Комментарии:

1. Хорошо, какой тип данных вы используете для хранения ваших дней? (Лучший, вероятно LocalDate , из java.time пакета, если я правильно понимаю ваши требования).

2. @DavidWallace Извините, я должен был сказать это изначально, и я отредактирую его в исходном вопросе. Все это самоподдерживается, и я не хочу использовать что-либо за пределами чистого базового кода. В настоящее время у меня есть 3 частные переменные int: год, день и месяц. В настоящее время я использую JUnit только для тестирования всего.

3. Классы java.time встроены в Java 8 и более поздние версии. Дата-время — обманчиво хитрая штука; не изобретайте это колесо. YearMonth.from( LocalDate.now( ZoneId.of( "America/Montreal" ) ).plusMonths( 3 ) ).getLengthOfMonth()

4. На самом деле я не хочу изобретать ее заново, но, к сожалению, я не могу использовать какие-либо внешние библиотеки. я пытаюсь выполнить это задание, и это законно единственное, что мешает мне включить его.

Ответ №1:

Функция plusDays() от Joda и Java 8 LocalDate уже имеют логику, которую вы пытаетесь достичь

Комментарии:

1. Я в основном хочу воссоздать функцию Joda. Я хочу сделать все это в базовом коде вручную без необходимости вызывать внешнюю функцию.

2. Я обычно не одобряю дублированные усилия <- (rant) . Выразив это, вы взглянули на логику Джоды ?, это может дать вам некоторое вдохновение для ваших поисков.

3. К вашему сведению, проект Joda-Time находится в режиме обслуживания, и команда рекомендует перейти на классы java.time. Исходный код java.time доступен в проекте OpenJDK, но остерегайтесь лицензии GPL.

4. Я полностью согласен с напыщенной речью. Я проверю логику и вернусь, надеюсь, с завершенной функцией и проверкой для вас.

5. К сожалению, я не нашел ничего, что действительно помогло бы мне в моих потребностях.

Ответ №2:

Хорошо, в итоге я просто скопировал свою оригинальную функцию addToMonth и изменил ее, чтобы она соответствовала дням. Пока это работает, но я думаю, что это приведет к сбою в случаях, когда разное количество дней не выстраивается в очередь.