Java8为LocalDateTime添加时间不起作用

时间:2015-06-23 13:04:53

标签: java-8 java-time

我尝试过如下,但在两种情况下它都显示同一时间?我做错了什么。

    LocalDateTime currentTime = LocalDateTime.now(ZoneId.of("UTC"));
    Instant instant = currentTime.toInstant(ZoneOffset.UTC);
    Date currentDate = Date.from(instant);
    System.out.println("Current Date = " + currentDate);
    currentTime.plusHours(12);
    Instant instant2 = currentTime.toInstant(ZoneOffset.UTC);
    Date expiryDate = Date.from(instant2);
    System.out.println("After 12 Hours = " + expiryDate);

"当前日期"时间显示为" 12小时后" ...

2 个答案:

答案 0 :(得分:30)

LocalDateTime的文档指定LocalDateTime的实例是不可变的,例如plusHours

  

public LocalDateTime plusHours(long hours)

     

返回具有指定数量的此LocalDateTime的副本   几个小时。

     

此实例是不可变的,不受此方法调用的影响。

     

<强>参数:
      hours - 要添加的小时数,可能是负数   的返回:
      基于此日期时间的LocalDateTime,添加小时数,不为空   的抛出:
      DateTimeException - 如果结果超出支持的日期范围

因此,在执行plus操作时创建LocalDateTime的新实例,需要按如下方式分配此值:

LocalDateTime nextTime = currentTime.plusHours(12);
Instant instant2 = nextTime.toInstant(ZoneOffset.UTC);
Date expiryDate = Date.from(instant2);
System.out.println("After 12 Hours = " + expiryDate);

我希望它对你有所帮助。

答案 1 :(得分:7)

来自java.time package Javadoc(强调我的):

  

此处定义的类表示主要的日期 - 时间概念,   包括时刻,持续时间,日期,时间,时区和时段。   它们基于ISO日历系统,这是事实上的世界   日历遵循公理格里高利规则。 所有课程都是   不可变和线程安全。

由于java.time包中的每个类都是不可变的,因此您需要捕获结果:

LocalDateTime after = currentTime.plusHours(12);
...