如何在Java8中正确使用ZoneOffset、ZoneId和LocalDateTime?
这里的目标是将LocalDateTime来回转换为epoch second 假设我将LocalDateTime定义为:如何在Java8中正确使用ZoneOffset、ZoneId和LocalDateTime?,java,java-time,Java,Java Time,这里的目标是将LocalDateTime来回转换为epoch second 假设我将LocalDateTime定义为: LocalDateTime now = LocalDateTime.now(); 我想把它转换成亚洲/加尔各答时区的第二纪元,我可以这样做: long epochSecondNow = now.atZone(ZoneId.of("Asia/Kolkata")).toEpochSecond(); 现在,我想再次从epochSecondNow生成“Now”: LocalDate
LocalDateTime now = LocalDateTime.now();
我想把它转换成亚洲/加尔各答时区的第二纪元,我可以这样做:
long epochSecondNow = now.atZone(ZoneId.of("Asia/Kolkata")).toEpochSecond();
现在,我想再次从epochSecondNow生成“Now”:
LocalDateTime类有一个方法'
ofEpochSecond(长epochSecond,长nanoOfSecond,区域偏移ZoneOffset)
,它以epoch秒、nano秒和区域偏移为参数
我无法使用“亚洲/加尔各答”创建区域偏移。我应该如何为我的区域创建ZoneOffset对象,以便使用“ofEpochSecond”方法。
还有别的办法吗
谢谢 好的,我只是通过以下方式来实现,通过将偏移量值作为字符串传递来获得ZoneOffset:
LocalDateTime nowFromEpochSecond = LocalDateTime.ofEpochSecond(epochSecondNow,0,ZoneOffset.of("+05:30"));
我希望有一种更干净的方法来实现这一点,而不是硬编码偏移量和区域id。尝试使用Instant.ofepochssecond
Instant instant = Instant.ofEpochSecond(epochSecondNow);
ZonedDateTime atZone = instant.atZone(ZoneId.of("Asia/Kolkata"));
LocalDateTime localDateTime = atZone.toLocalDateTime();
如果要与系统时区一起使用,可以使用ZoneId.systemDefault()谢谢,这样更好。我不想使用系统默认值,因为我需要在应用层本身修复时区,因为远程服务器上的系统默认值可能不同。