Используйте java .time, современный Java API даты и времени, для вашей работы с датой и временем.
ZonedDateTime currentTime = ZonedDateTime.now(ZoneId.of("Australia/Sydney"));
System.out.println(currentTime);
ZonedDateTime tomorrowSameTime = currentTime.plusDays(1);
System.out.println(tomorrowSameTime);
Вывод при запуске только сейчас:
2020-04-04T16:00:30.579484+11:00[Australia/Sydney]
2020-04-05T16:00:30.579484+10:00[Australia/Sydney]
Обратите внимание: завтра у нас такое же время, 16:00. Поскольку летнее время (летнее время) заканчивается, смещение UT C на завтра будет другим: +10: 00 вместо +11: 00. И что важно, хотя я нахожу + 86400000L
довольно близким к нечитаемому для добавления дня, .plusDays(1)
очень четко передает намерение.
Пожалуйста, укажите другой часовой пояс Восточной Австралии, если требуется.
Что пошло не так в вашем коде? Черувим очень хорошо объяснил это в другом ответе, мне не нужно повторяться. Позвольте мне лишь добавить, что класс Date
не только плохо спроектирован, что порождает ваше замешательство, но и давно устарел. Я рекомендую вам не использовать его. И, как замечает черувим в комментарии, программирование с датами сложно. Не верьте, что вы можете сами конвертировать 1 день в 86 400 000 миллисекунд. Оставьте все вычисления даты и времени проверенным библиотечным методам.
Ссылка: Oracle учебник: Дата и время , объясняющие, как использовать java .time.