PostgresqlデータベースにTimestampデータ型として保存java.sql.Timestamp
し、DB に保存されているものから現在のtimestampまでの分または時間の違いを調べたいと考えています。これを行うための最良の方法は何ですか? そのためのメソッドが組み込まれていますか、それとも長いものに変換する必要がありますか?
6 に答える
私はこれの使用を終了しました。他の人が検索した場合に投稿したいだけです。
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;
}
この関数を使用してUNIX_TIMESTAMP
、DATETIME を時、分、秒の値に変換します。
また、どちらの値が大きいかわからない場合は、ABS 関数を使用してください。
日付の追加/削除の場合、これは私の一般的な関数です:
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
date_part
関数はあなたに与えることができるhours
か、興味があるかもしれませんが、それは一種のものでsubstr
あり、したがってそれに依存することはできません. あなたのtimestamp
値をunix_timestamp
合計extract
経過時間、分、またはあなた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.
1970 年から経過した合計秒数を求めると、時間などの正しい値を計算できます。これはepoch
withextract
関数を使用して実現できます。
epoch
からの合計秒数を返します1970-01-01 00:00:00-00
。そして、ご存知のように、3600 で割ることで時間に変換できます。
epoch
で使用extract
:
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 |
----------------+--------------+-----------------------
同様に、他の必要な値を抽出して、必要に応じて使用できます。
使用するだけです:
Date.compareTo(Date)
最初に java.sql.Timestamps を Date に変換する必要があります。