Le problème est que je dois modifier mon code pour passer de l'objet Calendar à l'objet LocalDateTime. Mais je n'obtiens pas le même horodatage à la fin. Au premier appel, j'ai obtenu la même chose avec localDateTime, aux appels suivants, j'obtiens d'autres horodatages et j'utilise le même paramètre pour calculer les horodatages. Je ne sais pas pourquoi j'obtiens des résultats différents. Ce n'est pas logique pour moi. Ce que je veux faire, c'est : J'obtiens un horodatage UTC. Je veux le régler sur l'heure allemande (Europe/Berlin) (important pour les saisons d'été et d'hiver). Je veux ensuite calculer le début de la journée (00:00) et la fin de la journée (23:59). Je veux ensuite obtenir l'horodatage de ces heures.
Je construis une API avec spring-boot. La fonction décrite ci-dessus est invoquée par une classe contrôleur de spring-boot. Le premier appel après le démarrage de l'API calcule les résultats attendus. Mais tous les appels suivants donnent d'autres résultats. Toujours avec une différence de 7200. J'ai essayé d'autres méthodes avec localDateTime, mais cela ne donne jamais le même horodatage qu'avec le calendrier.
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;
Je veux par le paramètre timestamp 1536933600. Le résultat 1536876000 et 1536962399. Mais j'obtiens après la première demande par la méthode localDateTime 1536883200 et 1536969599.