2012-05-14 10 views
10

私はタイムスタンプデータ型としてのPostgreSQLデータベース内java.sql.Timestampを格納し、私は現在のタイムスタンプにDBに格納されている1つから数分または数時間の違いを知りたいです。これを行う最善の方法は何ですか?そこにはメソッドが組み込まれているのですか、それとも長いものに変換する必要がありますか?2つのjava.sql.Timestampsの間に時差がありますか?

+0

の可能重複[2つのJava java.sql.Timestamps間の差を計算する方法?](http://stackoverflow.com/questions/582278/how-to-calculate-the-difference-between- two-java-java-sql-timestamps) –

答えて

17

私はこれを使用して終了しました。彼らがそれを検索すると他の人のために投稿したいだけです。

public static long compareTwoTimeStamps(java.sql.Timestamp currentTime, java.sql.Timestamp oldTime) 
{ 
    long milliseconds1 = oldTime.getTime(); 
    long milliseconds2 = currentTime.getTime(); 

    long diff = milliseconds2 - milliseconds1; 
    long diffSeconds = diff/1000; 
    long diffMinutes = diff/(60 * 1000); 
    long diffHours = diff/(60 * 60 * 1000); 
    long diffDays = diff/(24 * 60 * 60 * 1000); 

    return diffMinutes; 
} 
+0

あなたは最高です! – dbrad

0

DATETIMEを時、分、秒の値に変換するには、UNIX_TIMESTAMP関数を使用します。
そして、どの値が大きいかわからない場合は、ABS機能を使用してください。日付の

1

これは私の一般的な機能である追加/削除する: "フィールド" のための

public static Date addRemoveAmountsFromDate(Date date, int field, int amount) { 
    Calendar tempCalendar = Calendar.getInstance(); 

    tempCalendar.setTime(date); 
    tempCalendar.add(field, amount); 

    return tempCalendar.getTime(); 
} 

例:Calendar.HOUR_OF_DAY、Calendar.MINUTE

1

ちょうど使用:

Date.compareTo(Date) 

あなたはjava.sql.TimestampsをDateに最初に変換する必要があります。

+0

OPは現在までの経過時間を時間と分の形式で検索しますが、日付が前後で等しい場合は検索しません。 –

+0

この回答は質問とは関係ありません –

0

date_part機能はあなたにhoursを与えることができますか、または興味があるかもしれませんが、それはsubstrの種類であり、したがってそれに頼ることはできません。 timestampの値をunix_timestampextractに換算する必要があります。合計timestampからcurrent_timestampまでの経過時間、分または関連する経過時間です。

:時間等の

select age(now(), timestamp '2010-11-12 13:14:15'); 
//results the interval to be "*1 year 6 mons 2 days 04:39:36.093*" 

select date_part('hours', age(now(), timestamp '2010-03-10 02:03:04')); 
// results *4* which is not correct. 

正しい値がこれはextract機能とepochを使用して達成することができる1970年からの経過秒数の合計を発見した後に計算することができます。
epochは、1970-01-01 00:00:00-00からの秒数の合計を返します。そして、あなたが知っている、私たちはextractepochを使用して3600

でそれを分割することにより時間に変換することができます

select 
    EXTRACT(EPOCH FROM current_timestamp - timestamp '2010-11-12 13:14:15') as total_seconds, 
    EXTRACT(EPOCH FROM current_timestamp - timestamp '2010-11-12 13:14:15')/3600 as total_hours; 
    ROUND( 
     EXTRACT(EPOCH FROM current_timestamp - timestamp '2010-11-12 13:14:15')/3600 
     ) as total_hours_rounded; 

//結果:同様

----------------+--------------+----------------------- 
| total_seconds | total_hours | total_hours_rounded | 
| --------------+--------------+----------------------| 
| 47452282.218 | 13181.189505 | 13181    | 
----------------+--------------+----------------------- 

、我々はできます他の必要な値を抽出し、必要に応じて使用します。

関連する問題