В вашем коде несколько проблем, позвольте мне попробовать перечислить одну за другой
- Вы всегда анализируете входную строку в LocalDate , даже если она представляет со временем
LocalDate date = LocalDate.parse("2016-06-21-10-19-22", formatter); //2016-06-21
LocalDate date = LocalDate.parse("2016-06-21", formatter); //2016-06-21
После разбора входной строки в
LocalDate
вы всегда конвертируете ее в
ZoneDateTime со временем начала дня, равным
00:00:00
ZonedDateTime resultado = date.atStartOfDay(ZoneId.of("UTC")); //2016-06-21T00:00Z[UTC]
И, наконец, вы конвертируете один и тот же
ZonedDateTime
в
Мгновенный независимо от времени на входе, поэтому вы всегда получаете один и тот же результат
Instant i = resultado.toInstant().getEpochSecond(); //1466467200
Лучше всего Для решения этой проблемы будет использоваться DateTimeFormatter с необязательным представлением времени в форматере и использование parseBest
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd[-HH-mm-ss]");
TemporalAccessor dt = parser.parseBest(dateTimeString, LocalDateTime::from, LocalDate::from);
if (dt instanceof LocalDateTime) {
(LocalDateTime) dt).atOffset(ZoneOffset.UTC).toInstant();
} else {
(LocalDate) dt).atStartOfDay(ZoneOffset.UTC).toInstant();
}