我想知道是否有办法使用新的LocalDateLocalTimeLocalDateTime类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();

Java相关问答推荐

使用联接和分页的SpringBoot Spring数据JPA

扩展到弹出窗口宽度的JavaFX文本字段

具有多种令牌类型和段的复杂Java 17正则表达式

如何在运行时动态创建表(使用Java、JPA、SprringBoot)

放气总是压缩整个街区吗?

在Spring Boot中使用哪个Java类来存储创建时间戳?

具有阻塞方法的开源库是否应该为执行提供异步选项?

Mac上的全屏截图在使用JavaFX时不能正常工作吗?

在Java 17中使用两个十进制数字分析时间时出错,但在Java 8中成功

如何从Keyloak映射Hibernate实体中的用户

@Rollback @ Transmission在验收测试中不工作

为什么我的回收视图会显示重复的列表?

使用存储在字符串变量中的路径目录打开.pdf文件

带有Health Check的Spring Boot BuildPack打破了本机映像构建过程

使用While循环打印素数,无法正常工作

基于配置switch 的@Controller的条件摄取

Java.time.OffsetDateTime的SQL Server数据库列类型是什么?

为什么相同的数据条码在视觉上看起来不同?

在Java中比较同一多维数组的两个不同的字符串元素

始终使用Spring Boot连接mongodb上的测试数据库