Это хорошее упражнение, но, к сожалению, вы делаете это неправильно. Я полагаю, что самое худшее, что я могу сделать, - это решить проблему для вас и опубликовать полный и / или исполняемый код. Поэтому я постараюсь направить вас к правильному пути решения задачи. Пожалуйста, не стесняйтесь следить за комментариями, если вы пытаетесь столкнуться с проблемами.
java .time
Сначала используйте LocalDate
для даты, а не Date
. Несмотря на название, класс Date
представляет не дату, а момент времени (и в этот момент он никогда не бывает одинаковым во всем мире). Напротив, LocalDate
- это точно дата без времени суток и без часового пояса. Как раз то, что вам нужно. Также класс Date
всегда был плохо спроектирован и теперь давно устарел.
Для получения текущей даты в вашем часовом поясе используйте, например,
LocalDate date = LocalDate.now(ZoneId.systemDefault());
Вы можете передать другой часовой пояс метод now
, если хотите.
Для преобразования даты в строку, чтобы вы могли проверить, является ли это палиндром, используйте DateTimeFormatter
и метод format
LocalDate
. Вы можете использовать DateTimeFormatter.ofPattern()
для создания форматера. Когда все это звучит расплывчато или даже непонятно, используйте вашу поисковую систему, чтобы найти примеры и учебные пособия, которые выложат sh намного больше, или посмотрите документацию, воспользуйтесь ссылками внизу.
Ваш способ проверить, является ли строка палиндромом, очень изящен, поэтому вам следует придерживаться ее.
Когда одна дата оказывается не палиндромом, используйте метод plusDays
из LocalDate
, чтобы добавить 1 день, так что вы получите на следующий день. LocalDate
знает следующий день, поэтому вам не нужно заботиться ни о количестве дней в каждом месяце, ни о високосных годах, все это позаботится о вас. Только помните, что plusDays()
возвращает новый LocalDate
экземпляр, который вам нужно сохранить в вашей переменной.
Links