Я храню java.sql.Timestamp в базе данных postgresql как тип данных Timestamp, и я хочу узнать разницу в минутах или часах от той, которая хранится в БД, до текущей метки времени. Каков наилучший способ сделать это? Есть ли встроенные методы для него или мне нужно преобразовать его в длинный или что-то?
Найти разницу в часах или минутах между 2 java.sql.Timestamps?
Ответ 1
Я закончил использовать это, просто хочу опубликовать его для других, если они его ищут.
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;
}
		Ответ 2
Для добавления даты/удаления это моя общая функция:
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
Ответ 3
Просто используйте:
Date.compareTo(Date) 
Вам нужно сначала преобразовать java.sql.Timestamps в Date.
Ответ 4
Используйте функцию UNIX_TIMESTAMP, чтобы преобразовать DATETIME в значение в часах, минутах и секундах. 
И если вы не уверены, какое значение больше, то используйте функцию ABS.
Ответ 5
 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 с функцией extract. 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                |  
----------------+--------------+-----------------------  
Аналогично, мы можем извлечь другие требуемые значения и использовать по мере необходимости.