这里的目标是将 LocalDateTime 来回转换为纪元秒。
假设我有一个 LocalDateTime 定义为:
LocalDateTime now = LocalDateTime.now();
Run Code Online (Sandbox Code Playgroud)
我想将其转换为亚洲/加尔各答时区的纪元秒,我可以这样做:
long epochSecondNow = now.atZone(ZoneId.of("Asia/Kolkata")).toEpochSecond();
Run Code Online (Sandbox Code Playgroud)
现在,我想从 epochSecondNow 再次生成“现在”:
LocalDateTime 类有一个方法 '
ofEpochSecond(long epochSecond,long nanoOfSecond, ZoneOffset zoneOffset)',它以纪元秒、nano of second 和 ZoneOffset 作为参数。
我无法使用“Asia/Kolkata”创建 ZoneOffset。我应该如何为我的区域制作 ZoneOffset 对象以使用 'ofEpochSecond' 方法。有没有其他办法?
谢谢!
尝试与 Instant.ofEpochSecond 一起使用
Instant instant = Instant.ofEpochSecond(epochSecondNow);
ZonedDateTime atZone = instant.atZone(ZoneId.of("Asia/Kolkata"));
LocalDateTime localDateTime = atZone.toLocalDateTime();
Run Code Online (Sandbox Code Playgroud)
如果要使用系统时区,可以使用 ZoneId.systemDefault()
好吧,我只是通过以下方式完成此操作,通过将偏移值作为字符串传递来获取 ZoneOffset:
LocalDateTime nowFromEpochSecond = LocalDateTime.ofEpochSecond(epochSecondNow,0,ZoneOffset.of("+05:30"));
Run Code Online (Sandbox Code Playgroud)
我希望有一种更干净的方法来做到这一点,而不是硬编码偏移量和区域 ID。
| 归档时间: |
|
| 查看次数: |
10131 次 |
| 最近记录: |