首页 > 解决方案 > System.currentTimeMillis() 与 Timestamp.valueOf(LocalDateTime.now(UTC)).getTime()

问题描述

不是都System.currentTimeMillis() vs Timestamp.valueOf(LocalDateTime.now(UTC)).getTime()假设给出相同的数字,试着找出它没有。

这是什么原因,不是都假设给出相同的数字,即从 1970 年开始没有 milisec 吗?

标签: javatime

解决方案


如果您阅读文档,javadoc 会Timestamp.valueOf​(LocalDateTime dateTime)说:

提供LocalDateTime的被解释为本地时区中的本地日期时间。

由于LocalDateTimeUTC时区,而不是本地时区,结果是时区转移到 JVM 的默认时区。如果您ZoneOffset.UTCnow()通话中删除,或者改用ZoneId.systemDefault()它,它将按预期工作。

或者,如果您确实有LocalDateTimeUTC 格式的 a 并且想要转换为Timestamp,您需要说LocalDateTimeUTC 格式的 is:

LocalDateTime ldt = LocalDateTime.now(UTC); // cannot change time zone
long millis = Timestamp.from(ldt.atZone(UTC).toInstant()).getTime(); // so specify time zone

当然,这些值仍然不一定相等,因为两次调用之间可能已经过去了几毫秒的时间。


推荐阅读