2017-01-09 11 views
1

私のアプリケーションはApache Derbyを使用しています。タイムスタンプ列の1つ、arrival_timeを読み取り、データベースの現在時刻から間隔を計算しています。Apacheを埋め込みましたTIMESTAMPDIFF関数は、節約後1時間を返しました。

select {fn TIMESTAMPDIFF(SQL_TSI_MINUTE,timestamp('1970-01-01 00:00:00'),CURRENT_TIMESTAMP)} - min(arrival_time)/1000 as "TIME" from APP.myTable

このクエリは正常に動作しますが日の光が、それは私に適切な間隔を返していません保存した後ました。時間差分は常に1時間余分です。

はさらにデバッグするには、私は、クエリの下に実行 - 次のように上記のクエリのための

select CURRENT_TIMESTAMP from APP.myTable; 
select {fn TIMESTAMPDIFF(SQL_TSI_SECOND,timestamp('1970-01-01 00:00:00'),CURRENT_TIMESTAMP)} from APP.myTable; 

出力された -

2017年1月9日午前7時45分55秒//現在のタイムスタンプ

1483951554 //間隔

私の理解によればvalが現在のタイムスタンプと同等であることが、私は、次のエポックタイムスタンプに間隔を変換しようとしていたときにresult-

GMTである必要があります:月、2017年1月9日午前8時45分54秒GMT

タイムゾーン使用中はGMTのみです。私が間違っているところを教えてください。

ありがとうございました。

答えて

0

私は上記の問題の根本原因を理解できなかったため、私は自分のロジックを変更しました。間隔を計算するためにderbyでユーザー定義関数を作成しました。 違いを計算するために、Java言語で私の関数を書いたと働いた。 Apache Derbyのユーザ定義関数を作成する

class DerbyFunction{ public static long getInterval(long timestamp){ return System.currentTimeMillis() - timestamp; } }

select APP.getInterval(arrival_time) as "TIME" from APP.myTable

は、次の場所を参照して -

Creating Apache Derby User defined Functions
関連する問題