Я храню 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 |
----------------+--------------+-----------------------
Аналогично, мы можем извлечь другие требуемые значения и использовать по мере необходимости.