我想知道是否有一种方法可以使用Java 8的新的LocalDate, LocalTime或LocalDateTime类来获取自1-1-1970 (epoch)以来的当前毫秒。

已知的方法如下:

long currentMilliseconds = new Date().getTime();

or

long currentMilliseconds = System.currentTimeMillis();

当前回答

你可以试试这个:

long diff = LocalDateTime.now().atZone(ZoneOffset.UTC).toInstant().toEpochMilli();

其他回答

对于LocalDateTime,我这样做:

LocalDateTime.of(2021,3,18,7,17,24,341000000)
    .toInstant(OffsetDateTime.now().getOffset())
    .toEpochMilli()

从Java 8开始,你可以调用Java .time. instant . toepochmilli()。

例如,调用

final long currentTimeJava8 = Instant.now().toEpochMilli();

得到的结果和

final long currentTimeJava1 = System.currentTimeMillis();
  default LocalDateTime getDateFromLong(long timestamp) {
    try {
        return LocalDateTime.ofInstant(Instant.ofEpochMilli(timestamp), ZoneOffset.UTC);
    } catch (DateTimeException tdException) {
      //  throw new 
    }
}

default Long getLongFromDateTime(LocalDateTime dateTime) {
    return dateTime.atOffset(ZoneOffset.UTC).toInstant().toEpochMilli();
}

要获得以毫秒为单位的当前时间(从epoch开始),请使用System.currentTimeMillis()。

为什么没有人提到LocalDateTime.toEpochSecond()方法:

LocalDateTime localDateTime = ... // whatever e.g. LocalDateTime.now()
long time2epoch = localDateTime.toEpochSecond(ZoneOffset.UTC);

这似乎比上面许多建议的答案要短得多……