Java8为LocalDateTime添加时间不起作用

Raj*_*ami 18 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);
Run Code Online (Sandbox Code Playgroud)

"当前日期"时间与"12小时后"相同...

小智 34

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

public LocalDateTime plusHours(long hours)

返回此副本,LocalDateTime并添加指定的小时数.

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

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

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

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

我希望它对你有所帮助.


mko*_*bit 8

java.time 包Javadoc(强调我的):

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

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

LocalDateTime after = currentTime.plusHours(12);
...
Run Code Online (Sandbox Code Playgroud)