java - System.currentTimeMillis() 与 Timestamp.valueOf(LocalDateTime.now(UTC)).getTime()
问题描述
不是都System.currentTimeMillis() vs Timestamp.valueOf(LocalDateTime.now(UTC)).getTime()
假设给出相同的数字,试着找出它没有。
这是什么原因,不是都假设给出相同的数字,即从 1970 年开始没有 milisec 吗?
解决方案
如果您阅读文档,javadoc 会Timestamp.valueOf(LocalDateTime dateTime)
说:
提供
LocalDateTime
的被解释为本地时区中的本地日期时间。
由于LocalDateTime
在UTC时区,而不是本地时区,结果是时区转移到 JVM 的默认时区。如果您ZoneOffset.UTC
从now()
通话中删除,或者改用ZoneId.systemDefault()
它,它将按预期工作。
或者,如果您确实有LocalDateTime
UTC 格式的 a 并且想要转换为Timestamp
,您需要说LocalDateTime
UTC 格式的 is:
LocalDateTime ldt = LocalDateTime.now(UTC); // cannot change time zone
long millis = Timestamp.from(ldt.atZone(UTC).toInstant()).getTime(); // so specify time zone
当然,这些值仍然不一定相等,因为两次调用之间可能已经过去了几毫秒的时间。
推荐阅读
- python - Plotly graph_objects 将 df 列添加到 hovertemplate
- c++ - 是否应该在 initial_suspend() 之后构造协程结果对象?
- firebase - 将 Firebase 托管配置为针对特定文件请求返回 204
- http - http:服务器在 Golang httptest 中向 HTTPS 客户端提供 HTTP 响应
- docker - 如何使用 docker 将 2 个不同的 repos 组合到根域中
- c++ - c++为不同的用户设置不同的符号可见性
- html - 移除两个 flexbox 项目之间的空间
- arrays - 为什么我的 C 程序中不断出现“fgets”函数错误,我该如何解决?
- spring-boot - Spring boot Authentication Failure Handler - 自定义,没有额外的 url 或查询参数
- ssl - 每个端点与代理不同的 CA 证书