使用java 8从过去获取Unix时间戳

Ann*_*ein 1 java

从Java 8开始我可以使用instantLocalDateTime

要获取Unix时间戳:

long unixTimestamp = Instant.now().getEpochSecond();
Run Code Online (Sandbox Code Playgroud)

但是,如果我想从过去得到一个时间,让我说2周我用这个:

int unixtime2weeksAgo = (int) ((System.currentTimeMillis() - 24 * 60 * 60 * 1000 * 14) / 1000L)
Run Code Online (Sandbox Code Playgroud)

有了这些文档,我无法构建基于新的Java 8功能的解决方案,有人可以通过使用Instant或LocalDateTime提供一个好的解决方案吗?

ass*_*ias 7

"两周前"取决于您的时区(可能有一些DST更改等).因此,使用InstantLocalDateTime可能会产生问题,因为它们不包含任何时区信息.

假设你想用UTC做,你可以使用:

ZonedDateTime twoWeeksAgo = ZonedDateTime.now(ZoneOffset.UTC).minusWeeks(2);
long unixTs = twoWeeksAgo.toEpochSecond();
Run Code Online (Sandbox Code Playgroud)

您可以指定一个不同的时区代替ZoneOffset.UTC上面看到的.例如,ZoneId.of( "Asia/Kolkata" ).