Проблема в том, что я должен изменить свой код с объекта Calendar на объект LocalDateTime. Но я не получаю ту же самую метку времени в конце. В первом вызове я получил то же самое с localDateTime, при следующих вызовах я получаю другие метки времени и использую тот же параметр для вычисления меток времени. Я не знаю, почему я получаю разные результаты. Это не логика для меня. То, что я хочу сделать, это: я получаю метку времени UTC. Я хочу установить его на немецкое (Европа / Берлин) время (важно для летнего и зимнего сезона). Затем я хочу вычислить начало дня (00:00) и конец дня (23:59). Тогда я хочу получить временную метку для этого времени.
Я создаю API с помощью Spring-Boot. Вышеописанная функция вызывается классом контроллера из spring-boot. При первом вызове после запуска API рассчитываются ожидаемые результаты. Но все последующие звонки дают другие результаты. Всегда с 7200 разницей. Я пробовал другие способы с localDateTime, но он никогда не дает такую же временную метку, как с календарем.
LocalDateTimeWay:
LocalDateTime localDateTime =
LocalDateTime.ofInstant(Instant.ofEpochSecond(timestamp), ZoneId.systemDefault());
LocalDateTime dayStartLocal = localDateTime.withHour(0)
.withMinute(0)
.withSecond(0)
.withNano(0);
ZonedDateTime startZonedDateTime = dayStartLocal.atZone(ZoneId.systemDefault());
long dayStartTimeStamp = startZonedDateTime.toInstant().getEpochSecond();
LocalDateTime dayEndLocal = localDateTime.withHour(23)
.withMinute(59)
.withSecond(59)
.withNano(999);
ZonedDateTime endZonedDateTime = dayEndLocal.atZone(ZoneId.systemDefault());
long dayEndTimeStamp = endZonedDateTime.toInstant().getEpochSecond();
CalendarWay:
Calendar cal=Calendar.getInstance();
cal.setTimeInMillis(timestamp*1000);
cal.setTimeZone(TimeZone.getTimeZone("Europe/Berlin"));
cal.set(Calendar.HOUR_OF_DAY,0);
cal.set(Calendar.MINUTE,0);
cal.set(Calendar.SECOND,0);
cal.set(Calendar.MILLISECOND,0);
long dayStartTimeStamp = calendar.getTimeInMillis()/1000L;
cal.set(Calendar.HOUR_OF_DAY,23);
cal.set(Calendar.MINUTE,59);
cal.set(Calendar.SECOND,59);
cal.set(Calendar.MILLISECOND,999);
long dayEndTimeStamp = calendar.getTimeInMillis()/1000L;
Я хочу по метке времени параметра 1536933600. Результат 1536876000 и 1536962399. Но я получаю после первого запроса по методам localDateTime 1536883200 и 1536969599.