两个System.currentTimeMillis() vs Timestamp.valueOf(LocalDateTime.now(UTC)).getTime()
都不应该给出相同的数字,请尝试找出不相同的数字。
这是什么原因,难道两个人都没有给出相同的数字,即从1970年开始没有误报吗?
答案 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
当然,值仍然不一定等于 ,因为两次调用之间可能要经过几毫秒的时间。