我尝试过如下,但在两种情况下它都显示同一时间?我做错了什么.
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)
我希望它对你有所帮助.
从java.time
包Javadoc(强调我的):
此处定义的类表示主要的日期 - 时间概念,包括时刻,持续时间,日期,时间,时区和时段.它们基于ISO日历系统,这是遵循公理格里高利规则的事实上的世界日历.所有类都是不可变的和线程安全的.
由于java.time
包中的每个类都是不可变的,因此您需要捕获结果:
LocalDateTime after = currentTime.plusHours(12);
...
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
23244 次 |
最近记录: |