Java结果集如何在UTC中获取时间戳

Java结果集如何在UTC中获取时间戳,java,jdbc,Java,Jdbc,数据库中有UTC格式的数据,当我尝试获取数据时 java.util.Calendar cal = Calendar.getInstance(); cal.setTimeZone(TimeZone.getTimeZone("UTC")); java.sql.Timestamp ts = resultSet.getTimestamp(PUBLISH_TIME); cal.setTime(ts); 这有什么问题吗?您的DateFormat实例很可能以本地时间显示该值。显示您的值时,请尝试一下: ja

数据库中有UTC格式的数据,当我尝试获取数据时

java.util.Calendar cal = Calendar.getInstance();
cal.setTimeZone(TimeZone.getTimeZone("UTC"));
java.sql.Timestamp ts = resultSet.getTimestamp(PUBLISH_TIME);
cal.setTime(ts);

这有什么问题吗?

您的DateFormat实例很可能以本地时间显示该值。显示您的值时,请尝试一下:

java.util.Calendar cal = Calendar.getInstance();
cal.setTimeZone(TimeZone.getTimeZone("UTC"));
java.sql.Timestamp ts = resultSet.getTimestamp(PUBLISH_TIME);
cal.setTime(ts);

SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss z");
sdf.setTimeZone(TimeZone.getTimeZone("UTC"));
System.out.println(sdf.format(cal.getTime()));
编辑:对您的评论:


如果我使用GMT,在SimpleDataFormat中会出现问题吗

可以使用一般时区(GMT+/-n)和文本(“如果它们有名称”作为JavaDoc状态-请参阅以获取名称信息)


这应该能奏效

你告诉我们,是你在问这个问题。你真的试过吗?它不会给出您期望的结果吗?如果是的话,那么你的期望是什么,结果是什么?当你使用自己的查询工具时,数据库会告诉你什么?是的,我试过了,是的,它没有给出我期望的结果。数据库具有UTC值,此代码进一步将+8添加到数据库中已存在的值。数据库是什么?你试过其他DB吗?你知道resultSet.getTimestamp(发布时间,Calendar.getInstance())吗;可能吗?如果我使用GMT,在SimpleDateFormat中这会是一个问题吗?请注意,根据文档说明,只有在基础数据库不存储时间戳的情况下,这才有效information@arahant,如果基础数据库存储时区(而不是时间戳)信息,那么就没有问题,因为时间戳将位于正确的时区中。问题是当时间戳存储在UTC中而没有时区信息时,因为Java将使用本地机器的时区来构造时间戳对象。(非常晚)警告!此方法将消耗毫秒数-而且,如果您是多线程的,请确保您不尝试通过共享时区日历来“优化”-出于某些扭曲的原因,该实现修改日历以构造replyIf
resultset.updateTimestamp(column,mili)
然后
resultset.getTimestamp(time,cal)
throws
java.lang.IllegalArgumentException:Timestamp格式必须为yyyy-mm-dd hh:mm:ss[.fffffffff]
。有一段时间我们一直在努力解决这个问题。@paul如果数据库服务器上没有设置时区,并且我们没有将rs.getTimestamp中的日历作为第二个参数传递,会发生什么情况。db列中的时间戳是否会被视为UTC?
java.util.Calendar cal = Calendar.getInstance(); 
cal.setTimeZone(TimeZone.getTimeZone("UTC")); 
java.sql.Timestamp ts = resultSet.getTimestamp(PUBLISH_TIME, cal);