web-dev-qa-db-fra.com

Meilleure façon de cloner Java.time.LocalDateTime

Je voudrais créer une copie Java.time.LocalDateTime mais il n’a pas de méthode clone().

Ce que je fais est le suivant:

long epochMilli = Instant.now().toEpochMilli();

LocalDateTime createDate =  LocalDateTime.ofInstant(Instant.ofEpochMilli(epochMilli), ZoneId.systemDefault());

LocalDateTime modificationDate = LocalDateTime.ofInstant(Instant.ofEpochMilli(epochMilli), ZoneId.systemDefault());

Existe-t-il un moyen plus simple de créer deux objets LocalDateTime avec exactement la même valeur date-heure?

8
zappee

Comme LocalDateTime est immuable, vous pouvez simplement référencer le même objet:

LocalDateTime createDate = LocalDateTime.now();

LocalDateTime modificationDate = createDate;
13
Jacob G.

Puisqu'un LocalDateTime est immuable, selon son Javadoc il n'y a pas de vraie raison de le cloner.

Vous pouvez simplement utiliser la même instance et la transmettre sans avoir à la cloner de manière défensive et à perdre de la performance.

2
Ferrybig

Comme c'est immuable, vous pouvez le faire de cette façon:

LocalDateTime copy = createDate.plusHours(0);
System.out.println(createDate.equals(copy)); // true

plusHours doc :

Retourne une copie de ce LocalDateTime avec le nombre spécifié de heures ajoutées. Cette instance est immuable et non affectée par cette méthode appel.

1
孙兴斌
LocalDateTime orig = LocalDateTime.now();
LocalDateTime copy = LocalDateTime.from( orig );

edité : ce code renverra le même objet, à partir de sources LocalDateTime:

public static LocalDateTime from(TemporalAccessor temporal) {
       if (temporal instanceof LocalDateTime) {
          return (LocalDateTime) temporal;
       } 
       ...
1
Mikhail Baksheev