Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/356.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Java8中正确使用ZoneOffset、ZoneId和LocalDateTime?_Java_Java Time - Fatal编程技术网

如何在Java8中正确使用ZoneOffset、ZoneId和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来回转换为epoch second

假设我将LocalDateTime定义为:

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()

谢谢,这样更好。我不想使用系统默认值,因为我需要在应用层本身修复时区,因为远程服务器上的系统默认值可能不同。