Comment réaliser ce qui suit dans l'API java 8 date time
ZonedDateTime zonedDateTime = Instant.now().atZone(ZoneOffset.UTC); System.out.println(zonedDateTime.toEpochSecond());
Le code ci-dessus est retourné
1573171200000
J'ai essayé de suivre
long currentDate = Date.UTC(date.getYear(), date.getMonth(), date.getDate(), 0, 0, 0); System.out.println(currentDate);
retourné
1573212520
3 Réponses :
Obtenez le LocalDate
d'aujourd'hui, convertissez-le en ZonedDateTime
au début de la journée, puis convertissez-le en Instant
et obtenez l'époque millis:
LocalDate.now().atStartOfDay(ZoneOffset.UTC).toInstant().toEpochMilli()
Ou utilisez un instant en premier lieu, Instant.now (). TruncatedTo (ChronoUnit.DAYS) .toEpochMilli ()
Vous devriez probablement aussi vouloir LocalDate.now (ZoneOffset.UTC)
. Non seulement parce que vous voulez la date UTC, mais aussi pour indiquer clairement au lecteur la date du fuseau horaire que vous obtenez.
@Holger C'est aussi une option. Personnellement, je trouve la version dans la réponse plus facile à lire, mais c'est une question de goût, alors merci de donner au questionneur et à tout le monde une deuxième option à choisir.
@ OleV.V. pour moi, il ne semble pas naturel d'utiliser des solutions qui supportent des conversions entre différentes choses, alors qu'il existe une alternative qui peut fonctionner avec la chose prévue en premier lieu.
En fait, les deux résultats sont corrects, il suffit de mal comprendre ce qui se passe:
Dans la première instruction où vous utilisez Date, vous définissez heure, min, sec comme 0
.
Au lieu de ZoneDateTime
, vous utilisez now ()
qui vous donnera la date et l'heure actuelle
Pour obtenir la même temps, je suppose que vous avez besoin de:
1573171200000 1573171200000
Maintenant, les deux approches retournent:
ZonedDateTime zonedDateTime = ZonedDateTime.of(LocalDate.now(), LocalTime.of(0,0,0), ZoneOffset.UTC); Long zdtm = zonedDateTime.toInstant().toEpochMilli();
long result = Instant.now (). truncatedTo (ChronoUnit.DAYS) .toEpochMilli ();
…
Si vous n'avez pas besoin de ZonedDateTime, utilisez simplement
System.out.println(Instant.now().toEpochMilli());
Edit: j'ai mal compris que vous avez besoin de millies dès le début de la journée. La réponse de YCF_L avec l'ajout de Holger est correcte.
Cordialement
Comment définissez-vous une «valeur longue»? Est-ce le nombre de millisecondes depuis le 1970-01-01T00Z? Veuillez préciser. Quel est le problème avec votre deuxième résultat, qui est également une «valeur longue» (en secondes au lieu de millisecondes)?