System.currentTimeMillis()与Timestamp.valueOf(LocalDateTime.now(UTC))。getTime()

时间:2020-02-11 00:57:57

标签: java time

两个System.currentTimeMillis() vs Timestamp.valueOf(LocalDateTime.now(UTC)).getTime()都不应该给出相同的数字,请尝试找出不相同的数字。

这是什么原因,难道两个人都没有给出相同的数字,即从1970年开始没有误报吗?

1 个答案:

答案 0 :(得分:2)

如果您阅读文档,则Timestamp.valueOf​(LocalDateTime dateTime)的Javadoc会显示:

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

由于{em> UTC 时区中的LocalDateTime,而不是 local 时区,因此结果是将时区转换为JVM的默认时区。如果您从ZoneOffset.UTC调用中删除now(),或者改用ZoneId.systemDefault(),它将按预期工作。

或者,如果您确实在UTC中有LocalDateTime,并且想要转换为Timestamp,则需要说出LocalDateTime在UTC中:

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

当然,值仍然不一定等于 ,因为两次调用之间可能要经过几毫秒的时间。

相关问题