我尝试过如下,但在两种情况下它都显示同一时间?我做错了什么。
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小时后" ...
答案 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);
...