Одна проблема с вашим кодом заключается в том, что вы предполагаете, что день составляет 86400 секунд - что не всегда так, обычно при переходе с летнего на зимнее время и наоборот.
Более надежный подход будетпросто получить ZonedDateTime
, представляющее полночь, и рассчитать разницу.
ZoneId zoneId = ZoneId.of(timeZone);
ZonedDateTime zdt = ZonedDateTime.now(zoneId);
ZonedDateTime midnight = zdt.toLocalDate().plusDays(1).atStartOfDay(zoneId);
//alternatively:
ZonedDateTime midnight = zdt.plusDays(1).truncatedTo(ChronoUnit.DAYS);
long seconds = ChronoUnit.SECONDS.between(zdt, midnight);
Что касается IST, пожалуйста, обратите внимание, что оно может представлять стандартное время Ирландии / Индии / Израиля и поэтому является неоднозначным.Лучше всего использовать часовые пояса IANA, например, «Азия / Калькутта».