我有一个令人困惑的问题。我在PostgreSQL数据库中有四个不同的表。使用Java我从表中获取一些时间戳并使用它们。现在的问题是: 为了正确地显示它们,我必须在两个表上使用时区来改变时间,而不是在另外两个表上。这是通过此代码示例
完成的Timestamp lowest = getLowestTimestampFromDB();
Timestamp highest= getHighestTimestampFromDB();
int diffHours = getDifference(lowest, highest);
Timestamp[] hours = new Timestamp[diffHours+2];
for (int i = 0; i < hours.length; i++) {
Calendar c = Calendar.getInstance(TimeZone.getTimeZone("GMT"));
c.setTime(timestamp);
long gmtTime = c.getTime().getTime();
long timezoneAlteredTime = gmtTime + TimeZone.getTimeZone("GMT-1").getRawOffset();
c = Calendar.getInstance(TimeZone.getTimeZone("GMT-1"));
c.setTime(new Timestamp(timezoneAlteredTime));
c.add(Calendar.HOUR, 1*i);
hours[i] = new Timestamp(c.getTimeInMillis());
}
System.out.println(Arrays.toString(hours));
System.out.println(lowest);
System.out.println(highest);
两张牌的印刷品是正确的
[1970-01-01 00:00:00.0, 1970-01-01 01:00:00.0, 1970-01-01 02:00:00.0]
1970-01-01 00:00:00.0
1970-01-01 02:00:00.0
其他两个错误
[1970-01-01 10:00:00.0, 1970-01-01 11:00:00.0, 1970-01-01 12:00:00.0]
1970-01-01 11:00:00.0
1970-01-01 12:00:00.0
数据库中的所有时间戳都没有时区。 我只是不明白为什么有时我必须减去一小时,有时不减去。
编辑:代码扩展。
答案 0 :(得分:0)
我怀疑问题是GMT受夏令时影响。
尝试使用通用协调时间:TimeZone.getTimeZone("UTC")
。