Мне нужно конвертировать секунды в UTC в день, затем добавить интервал в один день и вернуть секунды в UTC.Как получить первые секунды следующего дня в зависимости от текущих секунд?
Вот что у меня есть:
вариант # 1
public static final long nextDayStartSec(long epochSecondsInUTC) {
return (epochSecondsInUTC/TimeUnit.DAYS.toSeconds(1) + 1) * TimeUnit.DAYS.toSeconds(1);
}
Но не все дни содержат 86400 согласно Wikipedia:
Современные Unix времени основано на UTC , который рассчитывает время с использованием секунд SI, и разрывает промежуток времени в дни почти всегда 86400 секунд длинный, но из-за прыжка секунд иногда 86401 секунд.
вариант # 2
public static final long nextDayStartSec(long epochSecondsInUTC) {
return DateUtils.addMilliseconds(DateUtils.round(new Date(TimeUnit.SECONDS.toMillis(epochSecondsInUTC)), Calendar.DATE), -1)
.toInstant().atZone(systemDefault()).toLocalDateTime().toEpochSecond(ZoneOffset.UTC);
}
Но он использует широкий спектр библиотек (в том числе Apache Commons) и трудно читать.
Есть ли что-то простое, что я пропустил?
Время Unix не знает секунд прыжка, но не UTC. Поэтому данный ответ @assylias вполне удовлетворяет, если вы, как большинство пользователей, хотите игнорировать эту экзотическую функцию. Вы еще хотите увидеть ответ, связанный со скачкообразными секундами? –
И я сильно подозреваю, что ваш ввод «epochSecondsInUTC» на самом деле не является секундомерным отсчетом времени UTC, а скорее подсчет секунд без повторения с UNIX на период с 1970-01-01T00Z. Поэтому мой вывод и совет - просто принять ответ @assylias. –