java - 将 java.util.Date 转换为 java.sql.Timestamp 结果为错误值

标签 java java.util.date

服务器端代码(服务器时区是UTC):-

Date aDate = new Date();
java.sql.Timestamp aTimestamp = new java.sql.Timestamp(aDate.getTime());

客户端(移动应用程序,时区 GMT +5:30):-

Hitting a service request which runs above code on server side

问题是当我在服务器上调试时,发现以下值:-

aDate.getTime() prints to -> 1470472883877 milliseconds i.e., Sat Aug 06 2016 14:11:23 GMT+0530

但是

aTimestamp prints to ->  (java.sql.Timestamp) 2016-08-06 08:41:44.109

这有点奇怪,我不知道转换中发生了什么!请帮忙

最佳答案

UTC 和 GMT 是格式。
java.util.Datejava.sql.Timestamp 与时区无关。他们存储一个以毫秒为单位的长时间来表示他们的内部状态。 有关信息,日历可以识别时区。

因此,对于日期或时间戳,要在输出中区分 GMT 或 UTC 格式,您必须使用格式化程序,通过了解时区将日期输出为字符串。

在您的输出中:2016-08-06 08:41:44.109,您没有使用了解时区的格式化程序。它可能是 java.sql.Timestamp 实例上的 toString() 的结果或类似的结果。

您认为的转换不是转换,而是格式设置,因为两个对象之间的时间戳保持相同。

如果您想以 UTC 格式显示,请使用适当的格式化程序和 SimpleDateFormat 例如:

SimpleDateFormat dt= new SimpleDateFormat("MM/dd/yyyy hh:mm:ss z");
dt.setTimeZone(TimeZone.getTimeZone("UTC"));
String dateStringInUTC = dt.format(new Date(yourSqlTimestamp.getTime()));

关于java - 将 java.util.Date 转换为 java.sql.Timestamp 结果为错误值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38802327/

相关文章:

java - 将 OutputStream 重定向到文件

java - 以秒为单位获取日期表示?

scala - 无法在 java/scala 中使用 SimpleDateFormat 解析日期

java - 从 Oracle 数据库转换带有 AM/PM 日期时间的字符串

java - 如何从 Java 中的日期对象格式中删除毫秒

Java解密加密兼容SJCL?

java - 用于获取用户输入的 for 循环允许您为第一个问题输入两个值,但仅计算一个值

java - 如何在 Clojure 中形成 java.util.Date 调用

java - Maven多项目库依赖

java - 需要帮助让数字一直翻倍到中间