【问题标题】:Converting java.util.Date to java.sql.Timestamp results into wrong value将 java.util.Date 转换为 java.sql.Timestamp 结果为错误值
【发布时间】:2016-08-06 08:44:40
【问题描述】:

服务器端代码(服务器时区为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

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

【问题讨论】:

  • 你能把打印代码贴出来吗?
  • System.out.println(aDate.getTime())System.out.println(aTimestamp) @johnnyaug

标签: java java.util.date


【解决方案1】:

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

因此,对于日期或时间戳,要在输出中区分 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()));

【讨论】:

  • 是的,你是对的 DateFormatSimpleDateFormat 知道时区,但它们都返回日期的字符串值。但我希望输出为date
  • 一种解决方案是使用dateFormat.parse(strDate) 解析迄今为止的字符串,但我不想使用它,因为它会增加java.text.ParseException: Unparseable date 的概率
  • 我不明白你所说的“我希望输出为日期”是什么意思。输出应该是一个字符串,不是吗?如果您想要一个具有良好时间戳的日期对象,那么您已经有了它,因为正如解释的那样,您所谓的转换不是转换而是格式。
  • 如果我不理解您的需求,请不要犹豫解释您的意思“我希望输出为日期”
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 2012-05-24
    • 2011-08-17
    • 2018-01-05
    • 2013-01-27
    • 2012-09-12
    • 1970-01-01
    • 2018-06-13
    • 2015-12-23
    • 2014-02-10
    相关资源
    最近更新 更多