2016-10-19 9 views
1

私は混乱する問題があります。 PostgreSQLデータベースには4つのテーブルがあります。 Javaを使用して、テーブルからタイムスタンプを取得し、これらのテーブルを使用します。今問題: それらを示すために、私は時間を2つのテーブルでタイムゾーンを使用して変更する必要がありますが、他の2つではありません。これは、データベース内のすべてのタイムスタンプは、タイムゾーンなしであり、他の2タイムゾーン混乱はデータベーステーブルに依存する

[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 

のための2つのテーブル

[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 

、間違ったため

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); 

プリントが正しいか、このコード例で行われます。 私はちょうど時々私は1時間を減算しなければならない理由が得られないことがあります。

EDIT:コード拡張。

+1

表示されたコードは、データベースとやりとりすることはありません。 –

+0

これは、タイムスタンプの変更方法を示しています。 – Daniel

+0

*正確に*日時値を持つデータベース列のデータ型は何ですか? –

答えて

0

GMTが夏時間の影響を受けることが問題であると思われます。 ユニバーサル協定時刻を使用してください:TimeZone.getTimeZone("UTC")

関連する問題