我想知道是否有办法使用新的LocalDate
、LocalTime
或LocalDateTime
类Java8获得自1970年1月1日(大纪元)以来的当前毫秒数.
已知的方式如下:
long currentMilliseconds = new Date().getTime();
或
long currentMilliseconds = System.currentTimeMillis();
我想知道是否有办法使用新的LocalDate
、LocalTime
或LocalDateTime
类Java8获得自1970年1月1日(大纪元)以来的当前毫秒数.
已知的方式如下:
long currentMilliseconds = new Date().getTime();
或
long currentMilliseconds = System.currentTimeMillis();
我不完全确定您所说的"当前毫秒"是什么意思,但我假设它是自"纪元"以来的毫秒数,即世界协调时1970年1月1日午夜.
如果你想找到从历元right now,开始的毫秒数,那么用System.currentTimeMillis()
作为Anubian Noob has pointed out.如果是这样,就没有理由使用任何新的java.是时候这么做了.
然而,也许你已经从某个地方得到了一个LocalDateTime
或类似的对象,你想把它转换成从纪元开始的毫秒.这是不可能直接做到的,因为LocalDateTime
个物体家族不知道它们在哪个时区.因此,需要提供时区信息,以查找相对于纪元的时间,即UTC.
假设你有这样一个LocalDateTime
:
LocalDateTime ldt = LocalDateTime.of(2014, 5, 29, 18, 41, 16);
您需要应用时区信息,给ZonedDateTime
分.我和洛杉矶在同一时区,所以我会这样做:
ZonedDateTime zdt = ldt.atZone(ZoneId.of("America/Los_Angeles"));
当然,这是对时区的假设.还有一些可能出现的边缘情况,例如,如果当地时间恰好指定了夏令时(夏季)转换附近的时间.让我们把这些放在一边,但你应该知道这些 case 是存在的.
无论如何,如果您可以获得有效的ZonedDateTime
,则可以将其转换为自纪元以来的毫秒数,如下所示:
long millis = zdt.toInstant().toEpochMilli();