克隆java.time.LocalDateTime的最佳方法

时间:2018-08-14 13:23:17

标签: java datetime java-8

我想创建一个副本java.time.LocalDateTime,但是它没有clone()方法。

我要做的是以下事情:

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

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

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

是否有最简单的方法来创建两个具有完全相同的日期时间值的LocalDateTime对象?

4 个答案:

答案 0 :(得分:17)

由于LocalDateTime是不可变的,因此您可以简单地引用同一对象:

LocalDateTime createDate = LocalDateTime.now();

LocalDateTime modificationDate = createDate;

答案 1 :(得分:2)

由于LocalDateTime是不可变的,因此according to its Javadoc没有真正的理由来克隆它。

您可以只使用同一个实例,然后进行传递,而不必防御性地克隆它并降低性能。

答案 2 :(得分:1)

由于它是不可变的,因此您可以这样操作:

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

plusHours doc

  

返回带有指定数量的LocalDateTime的副本   小时增加。此实例是不可变的,不受此方法的影响   打电话。

答案 3 :(得分:1)

LocalDateTime orig = LocalDateTime.now();
LocalDateTime copy = LocalDateTime.from( orig );

已编辑: 此代码将从LocalDateTime源返回相同的对象:

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