Timezone mess依赖于数据库表

时间:2016-10-19 14:19:14

标签: java postgresql

我有一个令人困惑的问题。我在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

数据库中的所有时间戳都没有时区。 我只是不明白为什么有时我必须减去一小时,有时不减去。

编辑:代码扩展。

1 个答案:

答案 0 :(得分:0)

我怀疑问题是GMT受夏令时影响。 尝试使用通用协调时间:TimeZone.getTimeZone("UTC")