我想知道是否有一种方法可以使用Java 8的新的LocalDate, LocalTime或LocalDateTime类来获取自1-1-1970 (epoch)以来的当前毫秒。
已知的方法如下:
long currentMilliseconds = new Date().getTime();
or
long currentMilliseconds = System.currentTimeMillis();
我想知道是否有一种方法可以使用Java 8的新的LocalDate, LocalTime或LocalDateTime类来获取自1-1-1970 (epoch)以来的当前毫秒。
已知的方法如下:
long currentMilliseconds = new Date().getTime();
or
long currentMilliseconds = System.currentTimeMillis();
当前回答
从Java 8开始,你可以调用Java .time. instant . toepochmilli()。
例如,调用
final long currentTimeJava8 = Instant.now().toEpochMilli();
得到的结果和
final long currentTimeJava1 = System.currentTimeMillis();
其他回答
要获得以毫秒为单位的当前时间(从epoch开始),请使用System.currentTimeMillis()。
如果你有一个Java 8 Clock,那么你可以使用Clock .millis()(尽管它建议你使用Clock . Instant()来获得一个Java 8 Instant,因为它更准确)。
为什么要使用Java 8时钟?所以在你的DI框架中,你可以创建一个时钟bean:
@Bean
public Clock getClock() {
return Clock.systemUTC();
}
然后在你的测试中,你可以很容易地模拟它:
@MockBean private Clock clock;
或者你可以有一个不同的bean:
@Bean
public Clock getClock() {
return Clock.fixed(instant, zone);
}
这有助于不可测量地断言日期和时间的测试。
你可以试试这个:
long diff = LocalDateTime.now().atZone(ZoneOffset.UTC).toInstant().toEpochMilli();
对于LocalDateTime,我这样做:
LocalDateTime.of(2021,3,18,7,17,24,341000000)
.toInstant(OffsetDateTime.now().getOffset())
.toEpochMilli()
为什么没有人提到LocalDateTime.toEpochSecond()方法:
LocalDateTime localDateTime = ... // whatever e.g. LocalDateTime.now()
long time2epoch = localDateTime.toEpochSecond(ZoneOffset.UTC);
这似乎比上面许多建议的答案要短得多……