将java.util.Date转换为java.sql.Timestamp会导致错误的值

时间:2016-08-06 08:44:41

标签: 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

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

2 个答案:

答案 0 :(得分:0)

UTC和GMT是格式  java.util.Datejava.sql.Timestamp与时区无关。它们以ms为单位存储long time以表示其内部状态。 有关信息,日历可识别时区。

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

在您的输出中:2016-08-06 08:41:44.109,您不使用知道时区的编队器。这可能是toString()实例上的java.sql.Timestamp或类似内容的结果。

您认为转化不是转化而是格式化,因为时间戳在两个对象之间保持不变。

如果要以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()));

答案 1 :(得分:0)

您可能正在寻找以下内容:

Calendar cal = Calendar.getInstance(Locale.GERMANY);  // use your locale here
Timestamp aTimestamp = new Timestamp(cal.getTimeInMillis());
System.out.println(aTimestamp);
System.out.println(cal.getTime());

输出:

  

2016-08-06 19:12:54.613

     

2016年8月6日星期六19:12:54 CEST 2016