如何在Java 8中正确使用ZoneOffset,ZoneId和LocalDateTime?

时间:2015-12-08 09:49:30

标签: java java-time

这里的目标是将LocalDateTime转换为epoch秒来回。

假设我将LocalDateTime定义为:

LocalDateTime now = LocalDateTime.now();

我希望将它转换为亚洲/加尔各答时区的第二纪元,我可以这样做:

long epochSecondNow = now.atZone(ZoneId.of("Asia/Kolkata")).toEpochSecond();

现在,我想生成现在的'再次来自epochSecondNow:

LocalDateTime类有一个方法' ofEpochSecond(long epochSecond,long nanoOfSecond, ZoneOffset zoneOffset)'其中以纪元秒,纳秒和ZoneOffset为参数。

我无法使用" Asia / Kolkata"创建ZoneOffset。我应该如何为我的区域制作ZoneOffset对象,以便使用' ofEpochSecond'方法。 还有其他办法吗?

谢谢!

2 个答案:

答案 0 :(得分:3)

尝试使用Instant.ofEpochSecond

Instant instant = Instant.ofEpochSecond(epochSecondNow);
ZonedDateTime atZone = instant.atZone(ZoneId.of("Asia/Kolkata"));
LocalDateTime localDateTime = atZone.toLocalDateTime();

如果要使用系统时区,可以使用ZoneId.systemDefault()

答案 1 :(得分:0)

好吧,我只是通过以下方式完成此操作,方法是通过将偏移值作为String传递来获取ZoneOffset:

LocalDateTime nowFromEpochSecond = LocalDateTime.ofEpochSecond(epochSecondNow,0,ZoneOffset.of("+05:30"));

我希望有一种更简洁的方法,而不是硬编码偏移和区域ID。