16

PostgresqlデータベースにTimestampデータ型として保存java.sql.Timestampし、DB に保存されているものから現在のtimestampまでの分または時間の違いを調べたいと考えています。これを行うための最良の方法は何ですか? そのためのメソッドが組み込まれていますか、それとも長いものに変換する必要がありますか?

4

6 に答える 6

29

私はこれの使用を終了しました。他の人が検索した場合に投稿したいだけです。

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;
}
于 2012-05-19T01:45:54.580 に答える
0

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

于 2012-05-14T07:17:52.463 に答える
0

日付の追加/削除の場合、これは私の一般的な関数です:

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

于 2012-05-14T07:26:57.180 に答える
0

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 年から経過した合計秒数を求めると、時間などの正しい値を計算できます。これはepochwithextract関数を使用して実現できます。
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                |  
----------------+--------------+-----------------------  

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

于 2012-05-14T13:57:20.237 に答える
0

使用するだけです:

Date.compareTo(Date) 

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

于 2012-05-14T07:29:15.060 に答える