java - 如何在不知道时区但使用时钟的情况下将 LocalDateTime 转换回 Instant?
问题描述
我可以LocalDateTime
用Clock
. 在进行一些操作后,例如添加时间单位,我想将其转换为Instant
. 但它需要时区。如何得到它?
Clock clock = Clock.fixed(...);
LocalDateTime localDateTime = LocalDateTime.now(clock);
localDateTime = localDateTime.plusMinutes(60);
return localDateTime.toInstant(clock.getZone().getRules().getOffeset(...I need instant I don't have yet!...)
解决方案
您可以将区域偏移量传递ZoneOffset.UTC
给toInstant
. 或者,您可以创建一个ZonedDateTime
usingLocalDateTime#atZone
并将其转换为Instant
.
import java.time.Clock;
import java.time.Instant;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.ZoneOffset;
public class Main {
public static void main(String[] args) {
Clock clock = Clock.systemUTC();
LocalDateTime localDateTime = LocalDateTime.now(clock);
localDateTime = localDateTime.plusMinutes(60);
// UTC
Instant instant = localDateTime.toInstant(ZoneOffset.UTC);
System.out.println(instant);
// A custom zone offset
instant = localDateTime.toInstant(ZoneOffset.of("+02:00"));
System.out.println(instant);
// Your JVM's default timezone
instant = localDateTime.atZone(ZoneId.systemDefault()).toInstant();
System.out.println(instant);
// A specific timezone
instant = localDateTime.atZone(ZoneId.of("Africa/Ceuta")).toInstant();
System.out.println(instant);
}
}
输出:
2021-03-10T14:30:35.294134Z
2021-03-10T12:30:35.294134Z
2021-03-10T14:30:35.294134Z
2021-03-10T13:30:35.294134Z
从Trail: Date Time了解有关现代日期时间 API 的更多信息。
推荐阅读
- css - css中div上的消息点尾
- nginx - 如何在 Nginx 真实服务器上运行 laravel websocket
- excel - 使用索引匹配功能但未获得所需结果
- c++ - 谁能给我解释一下?
- python-3.x - 如何搜索特定字符串并替换此字符串usign python中的数字?
- cmd - 如何解决命令提示符中的“Make clean”错误
- r - 网页抓取:R rvest html_nodes 返回字符(0)
- python-3.x - 如何仅使用 while 循环在第二小的数字旁边输出名称
- c - stm8 uart tx中断问题
- promise - 使用箭头函数进入 puppeter 脚本的 page.evaluate 的返回块